0Pricing
React Academy · Урок

Архитектура 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 — локальная установка не требуется.

Все уроки этого курса

  1. Архитектура dnd-kit и дизайн с приоритетом доступности
  2. DndContext, useDraggable и useDroppable
  3. SortableContext для изменяемых порядком списков
  4. Пользовательские наложения перетаскивания и DnD между контейнерами
← Назад к React Academy