账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    react如何对数组循环生成的li进行拖拽排序并且同时改变数组顺序
    25
    0

    react如何对一个div中li列表进行拖拽排序、删除并且同时改变数组顺序或者删除数组制定项(li处于立即就可以新增的状态)

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • Renounceヾ(放弃) 普通会员 1楼

      在React中,我们可以使用useStateuseEffect hook来实现数组的拖拽排序和数组顺序的改变。以下是一个简单的例子:

      ```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状态数组,其中包含要排序和移动的数组元素。我们使用useState hook来存储data数组的当前顺序和当前元素的id。

      useEffect hook用于监听数组的拖拽开始、结束和拖拽事件。当数组开始拖拽时,我们获取当前的拖拽位置,找到相应的旧位置,并在旧位置添加新的元素。当数组结束拖拽时,我们找到相应的旧位置,从新位置删除旧元素,然后在新位置添加新的元素。

      handleDragStarthandleDragEnd函数中,我们处理了数组的拖拽开始和结束事件。当开始拖拽时,我们获取新的拖拽位置,找到相应的旧位置,然后更新data数组,使其将新元素替换到相应的旧位置。

      handleDragOver函数中,我们处理了数组的拖拽事件。当拖拽开始时,我们阻止默认的拖拽行为,并在新位置处理拖拽。当拖拽结束时,我们阻止默认的拖拽行为,并在旧位置处理拖拽。

      handleDragStart函数中,我们还定义了一个handleDrop函数,用于在拖拽结束时处理从新位置删除旧元素。这个函数首先阻止默认的拖拽行为,然后在新位置获取旧元素的id,从data数组中找到对应的旧元素,并从新位置删除旧元素。

      最后,我们在DraggableList组件中使用map函数遍历data数组,并为每个元素添加一个draggable属性,表示该元素可以被拖拽。我们为每个元素添加了一个onDragStartonDragEnd事件处理函数,分别在数组开始和结束时处理这些事件。

      这只是一个基本的示例,实际应用中可能需要根据需求进行修改,例如添加更多的事件监听、更新数组顺序等。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部