[英]Window is undefined in Nextjs but values are needed in useState
隨着屏幕尺寸的變化,試圖獲得准確的 window 值。 如何將 window 值放入 useState()? 由於 useState 不能在條件中使用,並且 window 在 useEffect 之外未定義?
const isSSR = typeof window !== "undefined";
const [windowSize, setWindowSize] = React.useState({
width: isSSR ? 1200 : window.innerWidth,
height: isSSR ? 800 : window.innerHeight,
});
function changeWindowSize() {
setWindowSize({ width: window.innerWidth, height: window.innerHeight });
}
React.useEffect(() => {
window.addEventListener("resize", changeWindowSize);
return () => {
window.removeEventListener("resize", changeWindowSize);
};
}, []);
return windowSize;
}
有兩點需要糾正
isSSR
邏輯不正確。 因此,在服務器中評估了window.innerWidth
和window.innerHeight
。 它應該是===
而不是!==
。const isSSR = typeof window === "undefined";
function changeWindowSize() {
if(!isSSR){
setWindowSize({ width: window.innerWidth, height: window.innerHeight });
}
}
*** changeWindowSize
更改,因為您僅在useEffect
中調用它,並且useEffect
掛鈎不會在服務器中執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.