Konva 图像元素消失
Konva Image Elements Disapearing
我正在使用 Konva 构建一种图像编辑器。我有一个菜单,可以在其中选择图像并将其添加到舞台上。它一直工作正常,直到我添加了添加多张图片的可能性。
发布代码对任何人来说阅读起来都非常耗时,但如果有人遇到同样的问题,...
一个函数在选择元素时将变量 'active' 设置为 true。在相同的元素再次被选中时,'active' 将被设置为 false。这非常有效,当我通过单击元素周围的任意位置将元素的 'active' 变量设置为 false 时出现问题。
它过去只是被取消选择并留在原处,但现在当我从外部取消选择它时,整个元素变得不可见。我在每个元素上也有一个 'visible' 属性,但它被设置为 true 并且在此过程中它不会改变。
1.元素 onClick 函数:
onClick(){
if (this.props.ElementReducer.element === null){
// console.log("There is no element selected || I´m getting selected");
this.setState({
active: true
});
this.props.selectedElement(this.state);
}else{
if (this.props.ElementReducer.element.identity == this.state.identity){
// console.log("I am already selected || I´m getting deselected");
this.setState({
active: false
});
this.props.unSelectedElement();
}else{
// console.log("Something else is selected || I´m getting selected");
this.props.prepareToUnSelectElement();
setTimeout(()=> {
this.props.unSelectedElement();
this.setState({
active: true
});
this.props.selectedElement(this.state);
},10);
}
}
}
2。外部取消选择函数:
deselectElement() {
if (this.props.ElementReducer.selectedId !== -1) {
this.props.prepareToUnSelectElement();
setTimeout(this.props.unSelectedElement, 100);
}
}
现在即使它们中的任何一个正在改变任何其他 属性 元素,并且没有调用其他函数,我不明白为什么取消选择时元素会变得不可见。
任何想法或意见都很受欢迎,谢谢。
为了清楚起见,'2.外部取消选择功能'调用另一个组件中的几个功能,这些功能与'1.元素 onClick 函数'。将 active 属性 设置为 false,然后从元素的 edition reducer 文件中删除元素。
我认为问题在于 Konva.image 组件在创建时需要引用图像节点。当从舞台上取消选择图像时,初始图像节点所在的 React.Component 将不会渲染,直到 Konva.image 再次被选中,因此 Konva.image 正在丢失该引用显示在其中的图像,它消失了。
这就是为什么组件本身仍然在舞台上,但直到再次选择 Konva.image 才显示图像。
我只是在重新渲染引用图像节点不会被重新渲染的组件之前保存了 Konva.image 状态。我希望它足够清楚。
感谢您的帮助。
我正在使用 Konva 构建一种图像编辑器。我有一个菜单,可以在其中选择图像并将其添加到舞台上。它一直工作正常,直到我添加了添加多张图片的可能性。
发布代码对任何人来说阅读起来都非常耗时,但如果有人遇到同样的问题,...
一个函数在选择元素时将变量 'active' 设置为 true。在相同的元素再次被选中时,'active' 将被设置为 false。这非常有效,当我通过单击元素周围的任意位置将元素的 'active' 变量设置为 false 时出现问题。
它过去只是被取消选择并留在原处,但现在当我从外部取消选择它时,整个元素变得不可见。我在每个元素上也有一个 'visible' 属性,但它被设置为 true 并且在此过程中它不会改变。
1.元素 onClick 函数:
onClick(){
if (this.props.ElementReducer.element === null){
// console.log("There is no element selected || I´m getting selected");
this.setState({
active: true
});
this.props.selectedElement(this.state);
}else{
if (this.props.ElementReducer.element.identity == this.state.identity){
// console.log("I am already selected || I´m getting deselected");
this.setState({
active: false
});
this.props.unSelectedElement();
}else{
// console.log("Something else is selected || I´m getting selected");
this.props.prepareToUnSelectElement();
setTimeout(()=> {
this.props.unSelectedElement();
this.setState({
active: true
});
this.props.selectedElement(this.state);
},10);
}
}
}
2。外部取消选择函数:
deselectElement() {
if (this.props.ElementReducer.selectedId !== -1) {
this.props.prepareToUnSelectElement();
setTimeout(this.props.unSelectedElement, 100);
}
}
现在即使它们中的任何一个正在改变任何其他 属性 元素,并且没有调用其他函数,我不明白为什么取消选择时元素会变得不可见。
任何想法或意见都很受欢迎,谢谢。
为了清楚起见,'2.外部取消选择功能'调用另一个组件中的几个功能,这些功能与'1.元素 onClick 函数'。将 active 属性 设置为 false,然后从元素的 edition reducer 文件中删除元素。
我认为问题在于 Konva.image 组件在创建时需要引用图像节点。当从舞台上取消选择图像时,初始图像节点所在的 React.Component 将不会渲染,直到 Konva.image 再次被选中,因此 Konva.image 正在丢失该引用显示在其中的图像,它消失了。
这就是为什么组件本身仍然在舞台上,但直到再次选择 Konva.image 才显示图像。
我只是在重新渲染引用图像节点不会被重新渲染的组件之前保存了 Konva.image 状态。我希望它足够清楚。
感谢您的帮助。