javascript - NotFoundError:删除反应组件时找不到节点
问题描述
我想根据上下文提供程序中的状态变量显示组件。当我加载此页面时,显示已关闭(fullRender 最初为 false)。单击按钮以显示它,我在 dom 中看到了画布。当我单击“删除”按钮时,我在上下文中调用 removeFullRender 再次将其设置为 false。
const launchRender = () => {
setFullRender(true);
}
const removeFullRender = () => {
setFullRender(false);
}
一旦我这样做,反应崩溃(=显示白页并在react-dom.development.js中抛出错误)NotFoundError: Node was not found
而不是再次显示关闭的div。
完整的渲染组件:
const FullRender = (props) => {
const context = useContext(FabricContext);
const [canvas, setCanvas] = useState();
useEffect(() => {
if(!context.fullRender){
return
}
setCanvas(new fabric.Canvas("full-canvas", {
selection: false,
}));
console.log(context.fullRender);
}, [context.fullRender]);
return (
<>
{context.fullRender ?
<>
<canvas
style={props.style}
id="full-canvas"
>
</canvas>
<Button onClick={context.removeFullRender}>X</Button>
</>
: <div>closed</div>
}
</>
);
}
解决方案
我让它在这个例子中工作:
https://codesandbox.io/s/dank-frog-9wcgc?file=/src/App.js
在画布周围使用反应片段导致错误(不确定原因)
更改为另一个标签应该可以解决它:
<div>
<canvas
style={props.style}
id="full-canvas"
>
</canvas>
<Button onClick={context.removeFullRender}>X</Button>
</div>
推荐阅读
- perl - ArrayOfArrays 到 csv 文件:第一个内部数组为空?
- unix - 如果模式匹配失败,如何让 unix grep 命令中止
- spring - spring 与 activemq 集成,池未打开
- python - ValueError:无法处理 Python/MySQL 中的参数
- javafx - JavaFx 自定义控件架构——处理焦点和关键事件
- sql-server - 在sql server中对给定数组进行排序
- javascript - 使用 jQuery 获取页面并提取具有特定类的所有链接
- php - PHP base_convert() 函数不能超过 6 字节
- javascript - 在 Node.JS 中使用 node-jose 进行加密和解密
- javascript - Flux:更新数组状态