我正在构建一个需要拖放界面的应用程序,以及连接拖放元素和构建流程图的功能。React和jQuery DOM操作
我正在使用React和jsplumb。我知道jsplumb使用jQuery,不建议一起使用jQuery和React,但它需要大量的时间投入来构建自定义的jsplumb选项。
我有添加元素工作正常,但我遇到了从DOM中删除元素的一些问题。
这是基本的结构:
我有一块状态的在父组件名为myArray。当用户将一个图标拖放到拖放区域时,我正在创建一个新对象来表示拖放的项目,然后将其推到myArray上。然后我调用setState来更新myArray状态。所述myArray的通入渲染节点成分作为道具:
<RenderNodes myArray={this.state.myArray} />
然后在RenderNodes组分,我通过阵列中的每个元素进行循环并使用jsplumb使其拖动,使一个目标,源,等...
例如:
jsPlumb.draggable(elementStateId, {});
jsPlumb.makeTarget(elementStateId, {
anchor: 'Continuous',
endpoint: ["Dot", {
radius: 3
}],
maxConnections: 4
});
jsPlumb.makeSource(elementConnectId, {
parent: elementStateId,
anchor: 'Continuous',
endpoint: ["Dot", {
radius: 3
}],
connectorOverlays: [
["Arrow", { width: 15, length: 15, location: 1, id: "arrow" }]
]
});
当用户从将可拖动的区域删除的元素,我需要删除在div形成DOM。所以我打电话:
jsPlumb.remove(elementStateId);
以及删除元素形成myArray状态片。
var newArray = myArray.splice(elementIndex, 0);
this.setState({
myArray: newArray
});
这将导致RenderNodes组件重新呈现,并且还导致以下错误。
Uncaught DOMException: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
我想这是因为我移除元素形成与jQuery的DOM,并随即反应过来试图做的DOM操作的背景和它与我的jQuery的更新冲突
我不是React专家,所以我不知道我该如何解决这个问题?我愿意接受任何建议。