我正在尝试在 Dragula-react 放置后更新反应组件中的状态。
我反应的接缝无法处理 Dragula 所做的 DOM 更改,我得到“NotFoundError (DOM Exception 8): The object can not be found here”。
如果您只是更改顺序,一切都会按预期进行,但是通过在父母之间移动孩子,您会得到错误。
这是工作示例。
这是重要的代码:
handleDrop(el, target, source, sibling) {
const newList = this.state.list.splice(0);
const nodes = target.children;
for (let i = 0; i < nodes.length; i++) {
const ch = this.findItem(newList, nodes[i].id);
if (ch) {
ch.order = i;
ch.parent = target.getAttribute('data-type');
}
}
this.fix(newList);
this.setState({list: newList});
}
fix(list) {
for(let i=0; i<list.length; i++) {
if (list[i].children) {
for (let j=0; j<list[i].children.length; j++) {
if (list[i].children[j].parent != list[i].id) {
const fixItem = list[i].children[j];
const index = list[i].children.findIndex(l => l.id == fixItem.id);
list[i].children.splice(index, 1)
const parent = list.find(p => p.id == fixItem.parent);
parent.children.push(fixItem);
}
}
}
}
}
谢谢您的帮助!