reactjs - 引用错误 : window is not defined NextJS

标签 reactjs typescript next.js

为生产构建应用程序时出现错误。它一直在说ReferenceError: window is not defined .我迷失了解决问题
完整代码:

const [windowSize, setWindowSize] = useState<WindowInfo>({
        width: window.innerWidth,
        height: window.innerHeight,
    });

    useEffect(() => {
        if (typeof window !== "undefined") { // error showing in this line
            function handleResize() {
                const data: WindowInfo = {
                    width: window.innerWidth,
                    height: window.innerHeight,
                }

                setWindowSize(data);
            }

            window.addEventListener("resize", handleResize);

            handleResize();

            return () => window.removeEventListener("resize", handleResize);
        }
    }, []);
任何人都可以告诉我这个问题的解决方法

最佳答案

window是浏览器唯一的东西。在 NodeJS 服务器上,window不会被定义。
您已经在 useEffect 内部处理此问题,但不在 useState .你需要这样的东西:

const isBrowser = (typeof window !== "undefined");
const [windowSize, setWindowSize] = useState<WindowInfo>({
    width: isBrowser ? window.innerWidth : 0,
    height: isBrowser ? window.innerHeight : 0,
});
我在上面使用了 0 作为默认值,但是您可以使用任何对您的项目合理的东西。

关于reactjs - 引用错误 : window is not defined NextJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65380959/

相关文章:

reactjs - 在我在react js中为body设置鼠标移动事件监听器后,组件一次又一次地渲染

javascript - RxJS 主题从未推送过第一个下一个

reactjs - 使用 NextJS 获取滚动位置

javascript - 未定义错误: TypeError: Cannot read properties of undefined (reading 'Icon' )

docker - 如何在 Docker 中挂载 NextJS 缓存

java - Spring Boot RedirectController 保留端口为 "redirect:/"

javascript - React Style Prop 不反射(reflect)在 IE 中

reactjs - 无法在 React-Bootstrap 的 Formgroup 组件中获取表单值

typescript - 在 TypeScript 中,使第二个参数自动完成取决于第一个参数中的字符串

typescript - 如何制作依赖于先前值的 typescript 定义?