Архитектура dnd-kit и дизайн с приоритетом доступности
Разберитесь в модели сенсоров dnd-kit, объявлениях для доступности и отличиях от react-beautiful-dnd
«Архитектура dnd-kit и дизайн с приоритетом доступности» — бесплатный урок React Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
Почему dnd-kit заменил react-beautiful-dnd
react-beautiful-dnd была основной библиотекой перетаскивания для React, но в 2023 году её официально перевели в архив и перестали поддерживать. Сообщество быстро выбрало dnd-kit в качестве рекомендуемой замены: библиотека была полностью разработана заново с учётом современного React и доступности.
Основная архитектура dnd-kit
dnd-kit построен на трёх ключевых архитектурных концепциях: DndContext управляет всем состоянием перетаскивания и координирует работу перетаскиваемых элементов и целей сброса, сенсоры абстрагируют методы ввода, поэтому одна и та же логика перетаскивания работает с мышью, касанием и клавиатурой, а модификаторы позволяют привязывать движение к определённым позициям, ограничивать его или преобразовывать.
Сенсоры: абстракция ввода
dnd-kit поставляется с тремя встроенными сенсорами. PointerSensor обрабатывает ввод с мыши и сенсорного экрана через унифицированный API событий указателя. KeyboardSensor обеспечивает полноценное перетаскивание только с клавиатуры. TouchSensor обрабатывает устаревшие события касания. Сенсоры настраиваются через свойство sensors компонента DndContext.
Инструкции по перетаскиванию с клавиатуры
В dnd-kit встроена клавиатурная навигация для обеспечения доступности. Пользователь нажимает Пробел, чтобы захватить элемент, клавиши со стрелками, чтобы переместить его на новую позицию, снова Пробел, чтобы отпустить его, и Esc, чтобы отменить перетаскивание без изменений. Эти действия автоматически объявляются программам чтения с экрана.
ARIA и поддержка программ чтения с экрана
dnd-kit автоматически добавляет aria-grabbed к перетаскиваемым элементам, чтобы вспомогательные технологии знали об их состоянии захвата. К зонам сброса добавляется aria-dropeffect, сообщающий, что произойдёт при отпускании элемента. Живая область объявляет обновления состояния, поэтому пользователи программ чтения с экрана слышат подтверждения, например «Элемент захвачен» или «Элемент успешно отпущен».
Дизайн без CSS с удалением неиспользуемого кода
dnd-kit разработан с возможностью удаления неиспользуемых частей, то есть вы импортируете только действительно используемые компоненты. В комплект не входит CSS — вы сами отвечаете за всё визуальное оформление и получаете полный контроль над внешним видом перетаскиваемых элементов, наложений и зон сброса. Благодаря этому размер сборки остаётся минимальным.
Обратные вызовы событий DndContext
DndContext предоставляет три основных обратных вызова событий для отслеживания жизненного цикла перетаскивания. onDragStart срабатывает, когда пользователь начинает перетаскивание, и получает ID активного элемента. onDragOver срабатывает непрерывно, пока перетаскиваемый элемент перемещается над целями сброса. onDragEnd срабатывает после завершения перетаскивания и передаёт активный элемент и цель сброса.
Настройка сенсоров в DndContext
Передайте массив конфигураций сенсоров в DndContext, используя свойство sensors вместе с хуком useSensors. Каждый сенсор инициализируется с помощью useSensor(SensorClass, options). Например, можно настроить PointerSensor на минимальное расстояние перетаскивания, чтобы предотвратить случайное перетаскивание при щелчке.
Модификаторы для ограничения движения
Модификаторы преобразуют координаты перетаскивания перед их применением к перетаскиваемому элементу. restrictToVerticalAxis ограничивает движение одним направлением. restrictToParentElement не позволяет перетаскиваемому элементу покинуть контейнер. snapCenterToCursor привязывает элемент так, чтобы его центр следовал за курсором. Вы объединяете несколько модификаторов в массив.
Система идентификаторов целей сброса и перетаскиваемых элементов
Каждому перетаскиваемому элементу и каждой цели сброса нужен уникальный строковый или числовой ID. Эти идентификаторы — основной способ, с помощью которого dnd-kit отслеживает, какой элемент перетаскивается и куда его отпускают. В onDragEnd прочитайте event.active.id для перетаскиваемого элемента и event.over?.id для цели сброса, чтобы обновить состояние приложения.
Доступность как основа
В отличие от многих библиотек перетаскивания, которые рассматривают поддержку клавиатуры как второстепенную задачу, dnd-kit делает доступность основой своего дизайна. KeyboardSensor — полноценный компонент с теми же возможностями, что и PointerSensor. Все атрибуты ARIA управляются автоматически, а пользовательские объявления можно настроить через свойство accessibility компонента DndContext.
Проверка сенсора клавиатуры
Какую клавишу использует dnd-kit, чтобы отменить выполняемое перетаскивание с клавиатуры без внесения изменений?
Итоги урока: основы dnd-kit
dnd-kit заменил помещённую в архив react-beautiful-dnd и стал стандартом сообщества для перетаскивания в React. Его архитектура строится вокруг DndContext для управления состоянием, сенсоров для абстракции методов ввода (указатель, клавиатура, касание) и модификаторов для ограничения движения. Доступность встроена в основу библиотеки: атрибуты ARIA, объявления в живой области и полноценная клавиатурная навигация доступны из коробки.
Часто задаваемые вопросы
Урок «Архитектура dnd-kit и дизайн с приоритетом доступности» бесплатный?
Да — полный текст урока «Архитектура dnd-kit и дизайн с приоритетом доступности» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Архитектура dnd-kit и дизайн с приоритетом доступности»?
Разберитесь в модели сенсоров dnd-kit, объявлениях для доступности и отличиях от react-beautiful-dnd Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Архитектура dnd-kit и дизайн с приоритетом доступности»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Архитектура dnd-kit и дизайн с приоритетом доступности
- DndContext, useDraggable и useDroppable
- SortableContext для изменяемых порядком списков
- Пользовательские наложения перетаскивания и DnD между контейнерами