【发布时间】:2020-05-12 17:32:46
【问题描述】:
我在初始组件加载时实现了一个窗口调整大小事件。该事件检测窗口内部宽度并将值保存在挂钩中。基于宽度钩子有第二个 useEffect 函数,在宽度变化时触发:
export const AppRouter = (props) => {
const [width, setWidth] = useState(window.innerWidth);
useEffect(() => {
const handleResize = () => setWidth(window.innerWidth);
window.addEventListener('resize', handleResize);
return () => {
window.removeEventListener('resize', handleResize);
};
}, []);
useEffect(() => {
setAppLayoutForViewportWidth();
}, [width]);
}
现在出现意外行为:整个组件在宽度钩子更改时重新渲染,而不仅仅是基于宽度钩子的 useEffect。
有人能说出整个组件重新渲染的原因吗?我只能重新渲染基于宽度的 useEffect 吗?
【问题讨论】:
-
setAppLayoutForViewportWidth是做什么的? -
该函数只根据window.innerWidth调用导入的辅助函数
-
我没有收到任何问题,但它按预期工作。当宽度改变时,整个组件会重新渲染,因为组件每次都会重新渲染,当状态改变时。
标签: reactjs react-hooks