react-beautiful-dnd无法拖拽的一个兼容场景

就这么个东西,拖拽排序的一个列表,但它就是不听使唤

在这里插入图片描述

直接上代码

拖拽部位的代码,平平无奇,复制粘贴毫无技术含量,但是弄死都没办法移动。


<DragDropContext onDragEnd={handleDragEnd}>
        <Droppable droppableId="droppabled">
          {provided => (
            <Container ref={provided.innerRef} {...provided.droppableProps}>
              {items.map((t, i) => (
                <Draggable draggableId={t.id} key={i} index={i}>
                  {p => (
                    <Item
                      ref={p.innerRef}
                      {...p.draggableProps}
                      {...p.dragHandleProps}
                      key={t.id}
                    >
                      {t.text}
                    </Item>
                  )}
                </Draggable>
              ))}
            </Container>
          )}
        </Droppable>
      
      </DragDropContext>

解决方案:

百度、google、AI问麻了,最终定位如下!!!!

React18版本的锅
APP.tsx 入口文件中用到了这么个玩意儿 React.StrictMode
AI给出的解释:有时,React.StrictMode可能会导致与react-beautiful-dnd库的冲突或意外行为。

root.render(
  // <React.StrictMode>
    <App />
  // </React.StrictMode>
);

注释掉就解决了。
此时的心情—

在这里插入图片描述

React-beautiful-dnd一个React组件库,用于实现漂亮且易于使用的拖放列表。要实现一个列表拖放,需要执行以下步骤: 1. 安装react-beautiful-dnd: ``` npm install --save react-beautiful-dnd ``` 2. 导入DragDropContext、Droppable和Draggable组件: ```javascript import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'; ``` 3. 创建状态并为每个列表项目分配一个唯一标识符: ```javascript const [items, setItems] = useState([ { id: "1", content: "Item 1" }, { id: "2", content: "Item 2" }, { id: "3", content: "Item 3" }, { id: "4", content: "Item 4" }, { id: "5", content: "Item 5" }, { id: "6", content: "Item 6" } ]); ``` 4. 创建渲染函数以呈现每个拖动项目: ```javascript const renderItems = () => { return items.map((item, index) => ( <Draggable key={item.id} draggableId={item.id} index={index}> {(provided, snapshot) => ( <div ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps} style={getItemStyle(snapshot.isDragging, provided.draggableProps.style)}> {item.content} </div> )} </Draggable> )); }; ``` 5. 创建渲染函数以呈现拖放列表: ```javascript const renderList = () => { return ( <DragDropContext onDragEnd={onDragEnd}> <Droppable droppableId="items"> {(provided, snapshot) => ( <div {...provided.droppableProps} ref={provided.innerRef} style={getListStyle(snapshot.isDraggingOver)}> {renderItems()} {provided.placeholder} </div> )} </Droppable> </DragDropContext> ); }; ``` 6. 创建onDragEnd函数以处理拖动项目: ```javascript const onDragEnd = result => { if (!result.destination) { return; } const itemsCopy = [...items]; const [reorderedItem] = itemsCopy.splice(result.source.index, 1); itemsCopy.splice(result.destination.index, 0, reorderedItem); setItems(itemsCopy); }; ``` 7. 创建样式函数以获取拖动和放置元素的样式: ```javascript const getItemStyle = (isDragging, draggableStyle) => ({ userSelect: 'none', padding: 16, margin: `0 0 ${8}px 0`, border: isDragging ? '2px solid #000' : 'none', ...draggableStyle }); const getListStyle = isDraggingOver => ({ background: isDraggingOver ? 'lightblue' : '#eee', padding: 8, width: 250 }); ``` 最后,用renderList函数渲染列表,将其放在你的React组件中,就可以开始拖放操作了!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值