Перетащите функциональность с реагировать - PullRequest
0 голосов
/ 30 января 2020

У меня довольно простой компонент перетаскивания

У меня работает функция перетаскивания, но когда я перетаскиваю свой элемент в dropZone, элемент добавляется в массив, а не удаляется элемент от предыдущего dropZone. Например, если я перетащу элемент из dropZone zone-1 в dropZone zone-2, он появится в обоих местах. По сути, клонирую предмет, я думаю?

Вот мой код

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      dropZones: {
        "zone-1": {
          id: "zone-1",
          title: "zone-1",
          items: [
            { taskID: 1, task: "I am label 1" },
            { taskID: 2, task: "I am label 2" }
          ]
        },
        "zone-2": {
          id: "zone-2",
          title: "zone-2",
          items: []
        },
        "zone-3": {
          id: "zone-3",
          title: "zone-3",
          items: [{ taskID: 4, task: "I am label 4" }]
        }
      },

      zoneOrder: ["zone-1", "zone-2", "zone-3"],
      draggedItem: {}
    };
  }

  onDrag = (event, item) => {
    event.preventDefault();
    this.setState({
      draggedItem: item
    });
  };

  onDragOver = event => {
    event.preventDefault();
  };

  onDrop = event => {
    const { dropZones, draggedItem } = this.state;
    console.log("dropzoneItems", event.target);
    this.setState({
      dropZones: {
        ...dropZones,
        [event.target.id]: {
          ...dropZones[event.target.id],
          items: [...dropZones[event.target.id].items, draggedItem]
        }
      },

      draggedItem: {}
    });
  };
  render() {
    return (
      <div className="App">
        <Container>
          <div
            onDrop={event => this.onDrop(event)}
            onDragOver={event => this.onDragOver(event)}
            className="todos"
          >
            {this.state.zoneOrder.map(zoneId => {
              const dropZone = this.state.dropZones[zoneId];
              const items = dropZone.items.map(items => items[items]);
              console.log("dropZone", dropZone);
              return (
                <Zone
                  id={dropZone.id}
                  key={dropZone.id}
                  dropZone={dropZone}
                  items={items}
                >
                  {dropZone.items.map((item, index) => (
                    <div
                      draggable
                      onDrag={event => this.onDrag(event, item)}
                      key={item.taskID}
                    >
                      {item.task}
                    </div>
                  ))}
                </Zone>
              );
            })}
          </div>
        </Container>
      </div>
    );
  }
}

export default App;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...