2017-02-21 6 views
0

Ich render einige Elemente von reagieren und verbinden mit jsPlumb. Jedes Mal, wenn es eine Änderung in der Konfiguration gibt, verbinde ich die Knoten neu. Aber ich bekomme Fehler von jsPlumb aus der zweiten Rendering Start wieVerwendung von jsPlumb mit React

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

Dann werden alle drag/bewegen Interaktion von jsplumb nicht mehr mit Fehlern arbeiten.

Was wäre der beste Weg, um die jsPlumb-Instanz mit dem Entfernen aller Endpunktverweise und Verbindungen zurückzusetzen? Ich mache jsPlumbInstance.reset(), aber es hilft nicht.

Antwort

0

Was ich tue ist, ich benutze eine Komponente für jede Kante, die nur ein leeres div rendert und die Edge-Info und jsplumb-Instanz durch die Requisiten übergeben. Dann verfolgt die Elternkomponente, welche Kanten verbunden sind.

In der übergeordneten Klasse:

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

Das Kind Klasse:

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

ich das gleiche tue, aber bevor 'ich tun muss auch connect' rufen' addEndpoint' oder 'makeSource'/'makeTarget' oder eine andere Möglichkeit, die Anschlüsse einzurichten, wenn ich nicht falsch liege. Und da sich meine Elemente bei jedem Mounten der Komponente möglicherweise ändern können, muss ich dies jedes Mal tun und rückgängig machen. Ich denke, das ist, wo meine Fehler herein kommen. Also mache ich es falsch? – Roy

+0

Meine Endpunkte sind statisch und an meine Knotenkomponente angehängt, so dass ich mir darüber keine Gedanken machen muss, aber ich kann mir vorstellen, dass Sie sie erstellen und auf die gleiche Weise zerstören können, wenn Sie möchten, dass sie Teil der Kanten sind. Meine Kanten verwenden einen Schlüssel basierend auf den Uuids der Endpunkte. Die Elternkomponente behält nur im Auge, welche Kantenkomponenten gerendert werden sollen, und wenn eine verschwindet, wird sie abgehängt. – Jesse

Verwandte Themen