【问题标题】:Using jsPlumb with React将 jsPlumb 与 React 一起使用
【发布时间】:2017-02-21 23:48:51
【问题描述】:

我正在使用 jsPlumb 从 react 和连接中渲染一些元素。每次配置发生变化时,我都会重新连接节点。 但是我从 jsPlumb 中得到错误,从第二次渲染开始就像

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

然后来自 jsplumb 的所有拖动/移动交互都会停止工作并出现错误。

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

【问题讨论】:

    标签: javascript reactjs jsplumb


    【解决方案1】:

    我所做的是为每个边缘使用一个组件,该组件只呈现一个空 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)
      }
    }
    

    【讨论】:

    • 我也在做同样的事情,但在connect 打电话之前,我还需要做addEndpointmakeSource/makeTarget 或任何其他设置连接器的方式,如果我没记错的话.而且由于每次安装组件时我的元素都可能发生变化,因此我每次都需要这样做并撤消它。我认为这就是我的错误所在。所以我做错了吗?
    • 我的端点是静态的并附加到我的节点组件,所以我不必担心,但我想如果你希望它们成为一部分,你可以用同样的方式创建它们并销毁它们的边缘。我的边缘使用基于端点的 uuid 的密钥。父组件只跟踪要渲染的边缘组件,如果一个消失,它就会被卸载。
    猜你喜欢
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2018-07-18
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多