2017-02-21 12 views
0

jsPlumbを使用して反応と接続からいくつかの要素をレンダリングしています。設定に変更があるたびにノードを再接続しています。 しかし、私はその後jsplumbからすべてのドラッグ/移動相互作用がエラーで動作を停止しjsPlumbをReactで使用する

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

状の第2のレンダリングから始まるjsPlumbからのエラーを取得します。

すべてのエンドポイント参照と接続を削除してjsPlumbインスタンスをリセットするにはどうすればよいでしょうか?私はjsPlumbInstance.reset()をやっていますが、その助けにはなりません。

答えて

0

私が行うことは、空の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

エンドポイントは静的でノードコンポーネントに接続されていますので、心配する必要はありませんが、それらを作成してエッジの一部にしたい場合は同じ方法で破棄することができます。私のエッジは、エンドポイントのuuidに基づいてキーを使用します。親コンポーネントは、どのエッジコンポーネントをレンダリングするかを追跡しています。消失すると、それはアンマウントされます。 – Jesse

関連する問題