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