Konva - 卸载组件时无法完全破坏反应阶段

Konva - Unable to completely destroy stage in react when unmounting component

我直接在我的 React 组件中使用 Konva API,它运行良好。

我只有一个大问题。

问题是当包含 ref 容器的组件被卸载时,反应应用程序崩溃,说暂存没有容器了。

我试过在组件卸载的时候调用stage上的destroy,进入那个方法还是崩溃。

所以基本上,据我了解,从 React 组件内部调用舞台销毁不会从 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 has no container. A container is required."

另外,我试过在舞台上调用destroy,还是报同样的错误。此外,即使我在 renderKonva 中创建和销毁舞台,实际上我也不会显示任何内容,因为舞台一旦创建它就会抛出同样的错误。

renderKonva 是一个 callbackRef。来自文档:

React will call the ref callback with the DOM element when the component mounts, and call it with null when it unmounts.

这意味着,当它卸载时 containerundefined

所以,

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;
  ...
 }

}