- 25
- 0
react如何对一个div中li列表进行拖拽排序、删除并且同时改变数组顺序或者删除数组制定项(li处于立即就可以新增的状态)
- 共 0 条
- 全部回答
-
Renounceヾ(放弃) 普通会员 1楼
在React中,我们可以使用
useState和useEffecthook来实现数组的拖拽排序和数组顺序的改变。以下是一个简单的例子:```jsx import React, { useState, useEffect } from 'react';
function DraggableList() { const [data, setData] = useState([ { id: 1, text: 'Item 1' }, { id: 2, text: 'Item 2' }, { id: 3, text: 'Item 3' }, { id: 4, text: 'Item 4' }, { id: 5, text: 'Item 5' }, { id: 6, text: 'Item 6' }, { id: 7, text: 'Item 7' }, { id: 8, text: 'Item 8' }, { id: 9, text: 'Item 9' }, { id: 10, text: 'Item 10' } ]);
useEffect(() => { const handleDragStart = event => { const newIndex = event.target.id - 1; const existingIndex = Array.from(data).indexOf(event.target.id); setData([...data, { id: newIndex, text: data[existingIndex].text }]); };
const handleDragEnd = event => { const endIndex = Array.from(data).indexOf(event.target.id); const currentIndex = Array.from(data).indexOf(event.target.id - 1); const removedData = data.splice(currentIndex, 1); setData(data); }; return () => { document.addEventListener('dragstart', handleDragStart); document.addEventListener('dragend', handleDragEnd); };}, []);
const handleDragOver = event => { event.preventDefault(); const handleDrop = event => { event.preventDefault(); const draggedIndex = event.target.id - 1; const existingIndex = Array.from(data).indexOf(event.target.id); const droppedIndex = Array.from(data).indexOf(draggedIndex); const updatedData = [...data]; updatedData.splice(draggedIndex, 1); updatedData.splice(droppedIndex, 0, { id: draggedIndex, text: data[existingIndex].text }); setData(updatedData); }; document.addEventListener('dragover', handleDragOver); };
return (
-
{data.map(item => (
- {item.text} ))}
export default DraggableList; ```
在这个例子中,我们首先定义了一个
data状态数组,其中包含要排序和移动的数组元素。我们使用useStatehook来存储data数组的当前顺序和当前元素的id。useEffecthook用于监听数组的拖拽开始、结束和拖拽事件。当数组开始拖拽时,我们获取当前的拖拽位置,找到相应的旧位置,并在旧位置添加新的元素。当数组结束拖拽时,我们找到相应的旧位置,从新位置删除旧元素,然后在新位置添加新的元素。在
handleDragStart和handleDragEnd函数中,我们处理了数组的拖拽开始和结束事件。当开始拖拽时,我们获取新的拖拽位置,找到相应的旧位置,然后更新data数组,使其将新元素替换到相应的旧位置。在
handleDragOver函数中,我们处理了数组的拖拽事件。当拖拽开始时,我们阻止默认的拖拽行为,并在新位置处理拖拽。当拖拽结束时,我们阻止默认的拖拽行为,并在旧位置处理拖拽。在
handleDragStart函数中,我们还定义了一个handleDrop函数,用于在拖拽结束时处理从新位置删除旧元素。这个函数首先阻止默认的拖拽行为,然后在新位置获取旧元素的id,从data数组中找到对应的旧元素,并从新位置删除旧元素。最后,我们在
DraggableList组件中使用map函数遍历data数组,并为每个元素添加一个draggable属性,表示该元素可以被拖拽。我们为每个元素添加了一个onDragStart和onDragEnd事件处理函数,分别在数组开始和结束时处理这些事件。这只是一个基本的示例,实际应用中可能需要根据需求进行修改,例如添加更多的事件监听、更新数组顺序等。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
