0

我正在使用 React.js 中的拖放交互。我正在使用下面的 onDragEnd 函数完成拖动时调用的 splice 函数对“行”数组重新排序:

onDragEnd = (result) => {
    const { destination, source, draggableId, type } = result;
    if (!destination) {
        return;
    }
    if (
        destination.draggableId === source.droppableId &&
        destination.index === source.index
    ) {
        return;
    }

    if (type === "row") {
        const newRowOrder = Array.from(**this.state.currentRows**);
        newRowOrder.splice(source.index, 1);
        newRowOrder.splice(destination.index, 0, **draggableId**);

        const newState = {
            ...this.state,
            currentRows: newRowOrder,
        };

        this.setState(newState);
    }
};

在调用 onDragEnd 函数之前,currentRow 状态如下所示: onDragEnd 之前的 currentRow 状态

当函数被调用时,拼接函数起作用(我认为)但它不会移动数组中的整个对象,只是移动 ID。拼接函数中使用的draggableId是需要移动的对象的ID。

调用 onDragEnd 函数后,currentRow 状态如下所示: onDragEnd 后的 currentRow 状态

可以将整个对象移动到新索引吗?

4

1 回答 1

1

我认为您只是插入了draggableId newRowOrder.splice(destination.index, 0, **draggableId**);,您可以使用该函数找到整个对象Array.find并插入整个对象

onDragEnd = (result) => {
    const { destination, source, draggableId, type } = result;
    if (!destination) {
        return;
    }
    if (
        destination.draggableId === source.droppableId &&
        destination.index === source.index
    ) {
        return;
    }

    if (type === "row") {
        const draggableRow = this.state.currentRows.find(row => row.id === draggableId);
        const newRowOrder = Array.from(this.state.currentRows);
        newRowOrder.splice(source.index, 1);
        newRowOrder.splice(destination.index, 0, draggableRow);

        const newState = {
            ...this.state,
            currentRows: newRowOrder,
        };

        this.setState(newState);
    }
}
于 2020-05-07T18:19:08.917 回答