【发布时间】:2022-01-13 16:23:13
【问题描述】:
这几天我一直在尝试解决这个问题,但似乎无法让它发挥作用。
首先,如果客户端以移动或桌面格式查看,我有一个自定义挂钩。
看起来像这样:
import { useState, useEffect } from "react";
function getWindowDimensions() {
if (typeof window !== "undefined") {
const { innerWidth: width, innerHeight: height } = window;
console.log("defined");
console.log(width < 768);
return width < 768 ? true : false;
}
console.log("undefined");
return true;
}
export default function useWindowDimensions() {
const [windowDimensions, setWindowDimensions] = useState(
getWindowDimensions()
);
function handleResize() {
setWindowDimensions(getWindowDimensions());
}
useEffect(() => {
window.addEventListener("resize", handleResize);
return () => window.removeEventListener("resize", handleResize);
}, []);
return windowDimensions;
}
现在我正在尝试使用它来在我的网站上的页脚或页眉样式交互之间切换:
import useWindowDimensions from "hooks/useWindowDimensions";
import React, { useEffect } from "react";
import Footer from "./Footer";
import Header from "./Header";
export default function Shim(props) {
const isMobile = useWindowDimensions();
return (
<div>
{!isMobile && <Header {...props} />}
{isMobile && <Footer {...props} />}
</div>
);
}
我希望这可以完美运行,但是看起来好像在 typeof window === "undefined" 时设置了初始值,因此,移动视图以桌面大小呈现(如果我在网站已加载,它按预期工作。)有人愿意帮助我如何让它正常工作吗?
谢谢!
【问题讨论】:
标签: javascript reactjs react-native react-hooks window