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.
这意味着,当它卸载时 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;
...
}
}
我直接在我的 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.
这意味着,当它卸载时 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;
...
}
}