问题描述
当同级组件安装和卸载时,我正在尝试调整画布的大小。我精简的JSX结构是这个
<FlexContainer>
<MyCanvasWrapper> // flex-grow is 1
<canvas width="1000" />
</MyCanvasWrapper>
<MyComponent /> // static 300px width
</FlexContainer>
在安装MyComponent
时,我需要调用一个调整大小的函数,该函数将读取MyCanvasWrapper
的布局宽度并将canvas属性设置为相同的大小。
我在MyComponent
中使用此钩子
useLayoutEffect(() => {
console.log('mount');
resize();
return () => {
window.requestAnimationFrame(() => {
console.log('unmount');
resize();
});
};
},[]);
从外观上看,这就像我想要的那样工作,但是我的直觉告诉我,requestAnimationFrame
在这种情况下是代码味道。如果像挂载阶段那样仅调用resize
(挂载调整大小始终有效,无论是否进行清理),宽度都不会改变。我通过将css和resize
函数附加到一个按钮,在宽度更改失败后可以单击该按钮,从而确定了它的功能。这给我带来了一个模糊的调用栈问题,其中useLayoutEffect
清理被调用的太早了?在这一点上我还是一无所知。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)