2017-02-21 6 views
0

Я передаю некоторые элементы из реакции и подключения с помощью jsPlumb. Каждый раз, когда происходит изменение конфигурации, я снова подключаю узлы. Но я получаю ошибки от jsPlumb, начиная со второго рендеринга какИспользование jsPlumb с React

.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

Смежные вопросы