在反应中使用jsPlumb

问题描述:

我使用jsPlumb呈现一些反应和连接的元素。每当配置发生变化时,我都会重新连接节点。 但我从jsPlumb错误从第二渲染开始像在反应中使用jsPlumb

.each iteration failed : TypeError: Cannot read property 'force' of undefined

然后,所有拖/从jsplumb移动交互停止与错误的工作。

重置jsPlumb实例并删除所有端点引用和连接的最佳方法是什么?我正在做jsPlumbInstance.reset(),但它没有帮助。

我所做的是我使用一个组件为每个边缘只呈现一个空的div并通过道具传递边缘信息和jsplumb实例。然后父组件跟踪哪些边连接。

在父类:

var edgeComponents = [] 
validEdges.forEach(
  
    edge => {
  
    edgeComponents.push(
  
     <Edge 
     key={${edge.source}-${edge.target}}
  
     edge={edge}
  
     jsPlumb={this.state.jsPlumbInstance}
  
     />
) 
    } 
) 

的子类:

export default class Edge extends Component { 
    componentDidMount(){ 
    const edge = this.props.edge 
    const connection = this.props.jsPlumb.connect({source:edge.source, target:edge.target}) 
    this.setState({connection: connection}) 
    } 

    componentWillUnmount() { 
    this.props.jsPlumb.detach(this.state.connection) 
    } 
} 
+0

我做相同的,但之前'connect'叫我还需要做'addEndpoint'或'makeSource'/'makeTarget'或其他任何设置连接器的方式,如果我没有错的话。由于每次组件装入时我的元素都可能发生更改,因此每次都需要执行并取消该组件。我认为那是我的错误进来的地方。那么我做错了吗? – Roy

+0

我的端点是静态的,并附加到我的节点组件,所以我不必担心这一点,但我想你可以创建它们并以相同的方式销毁它们,如果你希望它们成为边缘的一部分。我的边缘使用基于端点uuids的密钥。父组件只是跟踪要呈现哪些边缘组件,并且如果其中一个消失,则它将被卸载。 – Jesse