2017-02-21 49 views
0

我使用jsPlumb呈現一些反應和連接的元素。每當配置發生變化時,我都會重新連接節點。 但我從jsPlumb錯誤從第二渲染開始像在反應中使用jsPlumb

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

然後,所有拖/從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

我的端點是靜態的,並附加到我的節點組件,所以我不必擔心這一點,但我想你可以創建它們並以相同的方式銷燬它們,如果你希望它們成爲邊緣的一部分。我的邊緣使用基於端點uuids的密鑰。父組件只是跟蹤要呈現哪些邊緣組件,並且如果其中一個消失,則它將被卸載。 – Jesse