ReferenceError:窗口未定义 - 有没有办法在加载之前获取设备的宽度?

ReferenceError: window is not defined - is there a way to get the width of the device before loaded?

提问人:Link Lin 提问时间:7/15/2023 更新时间:7/15/2023 访问量:40

问:

在NextJs page.jsx中,useState中会出现错误: ReferenceError:未定义窗口。 我认为原因是由于组件尚未安装,因此找不到窗口。 但是,我想获取设备的宽度,以确定我正在使用的设备,以便获得适量的数据。有没有其他方法可以做到这一点??

export default function Home() {
  const applicationLimitWidth = 768;
  const queryClient = new QueryClient();
  const [windowWidth, setWindowWidth] = useState<number>(window.innerWidth);
  const [isMobile, setIsMobile] = useState<boolean>(
    windowWidth >= applicationLimitWidth ? false : true
  );

  useEffect(() => {
    window.addEventListener("resize", () => {
      setWindowWidth(window.innerWidth);
    });
  }, []);

我试图在加载后获取宽度,但在这种情况下,它没有再次渲染。

TypeScript Next.js 客户端

评论

0赞 katniss 7/16/2023
Next.js 使用 SSR,因此您的组件实际上是在服务器上呈现的,然后将其发送到客户端,然后在执行 JavaScript 后将其冻结。在使用特定于浏览器的全局变量之前,您需要添加。if (typeof window !== "undefined")

答: 暂无答案