Простые способы отключить перетаскивание в React Beautiful DND: удобное руководство

React Beautiful DND — популярная библиотека, обеспечивающая плавное и интуитивно понятное перетаскивание в приложениях React. Однако могут возникнуть ситуации, когда вы захотите отключить перетаскивание определенных элементов. В этой статье блога мы рассмотрим различные способы достижения этой цели в удобной для пользователя форме, используя разговорные объяснения и практические примеры кода.

Метод 1: отключение перетаскивания с помощью свойства «перетаскивание»
Один простой способ отключить перетаскивание в React Beautiful DND — установить для свойства «перетаскивание» значение «false» для нужного компонента. Вот пример:

import { Draggable } from 'react-beautiful-dnd';
const MyComponent = () => {
  return (
    <Draggable draggableId="item-1" index={0} isDragDisabled>
      {(provided, snapshot) => (
        <div
          ref={provided.innerRef}
          {...provided.draggableProps}
          {...provided.dragHandleProps}
          style={{
            background: snapshot.isDragging ? 'lightblue' : 'white',
            ...provided.draggableProps.style
          }}
        >
          {/* Component content */}
        </div>
      )}
    </Draggable>
  );
};

В этом примере для свойства isDragDisabled установлено значение true для компонента Draggable, что предотвращает его перетаскивание.

Метод 2: Условное «перетаскиваемое» свойство
Другой подход заключается в условной установке «перетаскиваемого» свойства на основе некоторого состояния или условия. Это позволяет вам динамически контролировать, включено или отключено перетаскивание. Вот пример:

import { Draggable } from 'react-beautiful-dnd';
const MyComponent = ({ isDraggingEnabled }) => {
  return (
    <Draggable draggableId="item-1" index={0} isDragDisabled={!isDraggingEnabled}>
      {(provided, snapshot) => (
        <div
          ref={provided.innerRef}
          {...provided.draggableProps}
          {...provided.dragHandleProps}
          style={{
            background: snapshot.isDragging ? 'lightblue' : 'white',
            ...provided.draggableProps.style
          }}
        >
          {/* Component content */}
        </div>
      )}
    </Draggable>
  );
};

В этом примере свойство isDraggedEnabled используется для условной установки свойства isDragDisabled компонента Draggable. Если для параметра isDraggedEnabled установлено значение false, перетаскивание отключено.

Метод 3: настраиваемый маркер перетаскивания
Если вы хотите отключить перетаскивание только для маркера перетаскиваемого компонента, но при этом разрешить перетаскивание из других областей, вы можете создать собственный элемент маркера перетаскивания и условно применить свойство «перетаскивание». Вот пример:

import { Draggable } from 'react-beautiful-dnd';
const MyComponent = () => {
  return (
    <Draggable draggableId="item-1" index={0}>
      {(provided, snapshot) => (
        <div
          ref={provided.innerRef}
          style={{
            background: snapshot.isDragging ? 'lightblue' : 'white',
            ...provided.draggableProps.style
          }}
        >
          <div {...provided.dragHandleProps}>
            {/* Drag handle content */}
          </div>
          {/* Component content */}
        </div>
      )}
    </Draggable>
  );
};

В этом примере свойство «перетаскивание» не применяется к внешнему элементу div, а вместо этого применяется к внутреннему элементу div «перетаскиваемый маркер». Это позволяет перетаскивать только при взаимодействии с конкретным элементом маркера перетаскивания.

В этой статье мы рассмотрели несколько способов отключения перетаскивания в React Beautiful DND. Используя «перетаскиваемый» реквизит, условный рендеринг или настраиваемые маркеры перетаскивания, вы можете легко управлять поведением перетаскивания в ваших приложениях React. Не забудьте выбрать метод, который лучше всего соответствует вашим конкретным требованиям.

Используя эти методы, вы можете улучшить взаимодействие с пользователем ваших приложений React и обеспечить плавный интерфейс, предотвращая при этом нежелательные действия перетаскивания.