Невозможно перетащить компоненты в один и тот же удаляемый react-beautiful-dnd

#javascript #reactjs #react-beautiful-dnd

#javascript #reactjs #react-beautiful-dnd

Вопрос:

Что происходит, когда у меня есть несколько элементов в столбце и я пытаюсь перетащить один, отображается только один, и в соответствии с уроками, найденными здесь, я должен быть в точке, где я могу перемещать элементы в пределах одного столбца, но не могу. В инструментах React dev идентификаторы state и r-b-dnd выглядят неплохо, но что я знаю? Я всего лишь новичок. Вот что у меня есть в моем onDragEnd на данный момент.

   onDragEnd = result => {
    const { destination, source, draggableId } = resu<
    if (!destination) return;
    if (
      destination.droppableId === source.droppableId amp;amp;
      destination.index === source.index
    ) {
      return;
    }
    let start = this.state.list[source.droppableId];
    let finish = this.state.list[destination.droppableId];
    if (start === finish) {
      let updatedList = this.state.list.map(obj => {
        if (obj.id === source.droppableId) {
          obj.cards.splice(source.index, 1);
          obj.cards.splice(destination.index, 0, draggableId);
        }
        return obj;
      });
      this.setState({ list: updatedList });
    }
  

И мое приложение можно найти здесь. Спасибо.

Ответ №1:

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

 if (destination.droppableId === source.droppableId amp;amp; destination.index === source.index) {
  console.log("they're equal");
  return;
}
  
  1. В вашем компоненте идентификатор перетаскивания одинаков для всех элементов в списке. Он должен быть уникальным для каждого перетаскиваемого элемента.
 const Card = props => {
  return (
    // This is NOT unique. This should be dynamic, we should use idx probably.
    <Draggable draggableId={props.col   "-"   props.color} index={props.idx}>
      {provided => (
  

После исправления этих двух, я могу перемещать элементы:https://codesandbox.io/s/r5z28w85yo . Надеюсь, это полезно.

Комментарии:

1. ДА! Большое спасибо. Есть ли что-нибудь еще, с чем мне следует быть осторожным? Я думаю, что руководство немного устарело, но в основном оно просто применяет правильное состояние для перемещения… верно?

2. Я думаю, что ваш код хорош. Нам просто нужны уникальные идентификаторы для перетаскиваемых объектов. И я не видел логики для перемещения между списками — разве это не часть вашего требования?

3. Да, но опять же, я новичок в этом, поэтому, если вы посмотрите @ my onDragEnd, это именно то, что я смог почерпнуть из видео-урока к этому моменту. Я думал о чем-то похожем на то, что я должен перемещать карточки между столбцами.