Gridstack.js — это библиотека для динамической сеточной верстки с поддержкой drag-and-drop и ресайза элементов. Важной частью расширяемости и интеграции Gridstack.js являются обертки (wrappers) и адаптеры (adapters). Они позволяют подключать Gridstack.js к различным фреймворкам и библиотекам, сохраняя при этом стандартный API и обеспечивая совместимость с существующим кодом.
Обертка представляет собой слой абстракции, который инкапсулирует работу с DOM и событиями, делая интерфейс более удобным для конкретного фреймворка. Адаптер же отвечает за интеграцию специфических механизмов событий или управления состоянием элементов сетки с внутренними механизмами Gridstack.js.
Gridstack.js поставляется с базовой Vanilla JS реализацией, но для React, Angular и Vue существуют специальные обертки. Они реализуют следующие ключевые задачи:
Синхронизация состояния сетки
Жизненный цикл компонентов
componentDidMount и уничтожает её в
componentWillUnmount.Управление событиями
change,
added, removed, resized, не
используя прямой доступ к DOM.Пример для React (синтаксис JSX):
import { GridStack } from 'gridstack';
import 'gridstack/dist/h5/gridstack-dd-native';
function MyGrid({ layout, onChange }) {
const gridRef = React.useRef();
React.useEffect(() => {
const grid = GridStack.init({ staticGrid: false }, gridRef.current);
grid.load(layout);
grid.on('change', (event, items) => onChange(items));
return () => grid.destroy();
}, [layout]);
return <div ref={gridRef} className="grid-stack"></div>;
}
Gridstack.js использует собственные внутренние события для управления изменениями элементов. Адаптер событий позволяет связывать эти события с внешними библиотеками или пользовательским кодом без изменения ядра Gridstack.js.
Пример адаптера для сторонней drag-and-drop библиотеки:
onDragStart, onDrag,
onDragStop.Gridstack.js не ограничивается только сеткой элементов. Часто требуется интеграция с визуальными компонентами:
Виджеты и панели
grid-item) можно обернуть в
компонент, который содержит собственное содержимое и управление.Реактивные обновления
grid.update() для обновления
размеров и позиции элементов при изменении состояния.Кастомные обертки полезны, когда требуется нестандартное поведение:
Шаг 1 — Инициализация Gridstack
cellHeight, verticalMargin,
disableResize, float).Шаг 2 — Определение API обертки
addWidget, removeWidget,
updateWidget, saveLayout инкапсулируют работу
с DOM.Шаг 3 — Подключение адаптера
Пример базового адаптера:
class DragAdapter {
constructor(grid) {
this.grid = grid;
}
onDragStart(event, el) {
console.log('Начало перетаскивания', el);
}
onDragStop(event, el) {
console.log('Конец перетаскивания', el);
this.grid.save(); // сохраняем текущее состояние
}
}
Обертки и адаптеры позволяют Gridstack.js быть гибким инструментом для создания сложных и динамических интерфейсов, интегрируя сетку с внешними фреймворками, событиями и компонентами без изменения ядра библиотеки.