Konva - Невозможно полностью уничтожить сцену в реакции при размонтировании компонента.

Я использую API Konva непосредственно в своем компоненте реакции, и он работает отлично.

У меня только одна большая проблема.

Проблема заключается в том, что, когда компонент, содержащий контейнер ref, отключен, приложение реагирует на сбой, говоря, что в промежуточной версии больше нет контейнера.

Я пытался вызвать разрушение на этапе, когда компонент размонтируется, он входит в этот метод, но все равно происходит сбой.

Таким образом, насколько я понимаю, призыв уничтожить сцену изнутри компонента реакции не разрушает сцену из DOM.

Может ли кто-нибудь помочь с этим вопросом?

РЕДАКТИРОВАТЬ: добавление фрагмента кода

    export default class ReactComp extends Component {
     renderKonva(container) {

     var stage = new Konva.Stage({
       container: container,
       width: 500, 
       height: 350
     });
     var layer = new Konva.Layer();
     var rect = new Konva.Rect({
      stroke: '#155DA4',
      strokeWidth: 2,
      fill: '#fff',
      width: 190,
      height: 190,
      shadowColor: 'black',
      shadowBlur: 10,
      shadowOffset: [10, 10],
      shadowOpacity: 0.2,
      cornerRadius: 2,
      opacity: 0.75,
      visible: true
     });
     layer.add(rect);
     stage.add(layer);
    }

    render() {
      return (
       <div ref={ref => this.renderKonva(ref)}></div>
      )
    }

Поэтому всякий раз, когда этот компонент отключается, я получаю сообщение об ошибке: "Uncaught Stage не имеет контейнера. Контейнер требуется".

Кроме того, я пытался вызвать на сцене команду destroy, но я все еще получаю ту же ошибку. Кроме того, даже если я создаю и уничтожаю сцену в renderKonva, и, по сути, у меня ничего не будет отображаться, потому что однажды созданная сцена выдает ту же ошибку.

1 ответ

Решение

renderKonva это обратный вызов Из документов:

React вызывает обратный вызов ref с элементом DOM, когда компонент монтируется, и вызывает его с нулем, когда он монтируется.

Это означает, что при размонтировании container является undefined,

Так,

export default class ReactComp extends Component { 
 constructor(props){
  super(props)
  this.stage = null;
 }

 renderKonva(container) {
  if (!container) {
    this.stage.destroy();
    return;
  }

  var stage = new Konva.Stage({
   container: container,
   width: 500,
   height: 350
  });

  this.stage = stage;
  ...
 }

}

Другие вопросы по тегам