簡體   English   中英

Window 在 Nextjs 中未定義,但在 useState 中需要值

[英]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;
}

有兩點需要糾正

  1. 您的isSSR邏輯不正確。 因此,在服務器中評估了window.innerWidthwindow.innerHeight 它應該是===而不是!==
const isSSR = typeof window === "undefined";
  1. 並將客戶端 function 更改為安全,如下所示。
function changeWindowSize() {
    if(!isSSR){
        setWindowSize({ width: window.innerWidth, height: window.innerHeight });
    }
}

*** changeWindowSize更改,因為您僅在useEffect中調用它,並且useEffect掛鈎不會在服務器中執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM