javascript - 从“react-sortable-tree”拖到另一个组件后如何防止删除节点?
问题描述
我使用“react-sortable-tree”来可视化文件夹树,使用“react-dnd”将节点从文件夹树复制到另一个组件。
我想使用shouldCopyOnOutsideDrop
prop 来防止将可拖动节点从文件夹树(SortableTree)删除到另一个组件(DropTarget),但是在删除节点后我在回调中收到 undefined 和错误。
请帮我解决问题。
<SortableTree
shouldCopyOnOutsideDrop={node => {
console.log('!!shouldCopyOnOutsideDrop node', node);
// ...
return true;
}}
dndType={'myDndType'} .... > ...
</ SortableTree>
// !!shouldCopyOnOutsideDrop node {node: undefined, prevTreeIndex: undefined, prevPath: undefined}
// Uncaught TypeError: Cannot read property 'length' of undefined return true;
解决方案
您可能没有使用该beginDrag
功能。在 DragSource文档中查看函数
beginDrag(props, monitor, component) {
// Return the data describing the dragged item
const item = { id: props.id };
return item;
},
此函数将告诉 react-dnd 实际拖动哪个对象,因此当放置事件发生时,react-dnd 将为您提供从该函数返回的相同对象。例如,在 DropTarget文档中看到函数
drop(props, monitor, component) {
if (monitor.didDrop()) {
// If you want, you can check whether some nested
// target already handled drop
return;
}
// Obtain the dragged item
const item = monitor.getItem();
// You can do something with it
ChessActions.movePiece(item.fromPosition, props.position);
// You can also do nothing and return a drop result,
// which will be available as monitor.getDropResult()
// in the drag source's endDrag() method
return { moved: true };
}
};
在此功能监视器中,将正在拖放的项目保持在放置目标上
推荐阅读
- database - 将数据存储到 AWS RDS / Aurora 时出现 AWS Glue MySQLSyntaxErrorException
- ruby-on-rails - 如何像 Trailblazer 一样使 ruby 类可调用?
- r - 如何在 R 中加入表格和时间对齐以进行群组分析
- vue.js - 点击后的Vuex错误和操作
- vba - VBA 引用另一个工作表中的数据不起作用
- android - 如何删除TextView中第一个字母之前的空格
- amazon-web-services - What is the purpose of having an option for both role and resource-based policy in Lambda when role inherently has 1 or more policies?
- powerbi - PowerBI Dax Measure: Error returning table of multiple values when a single is expected
- macos - How to open file from explorer tab in Visual studio code?
- mysql - 当我用 Month 创建表时,他只给了 0000-00-00