【发布时间】:2021-05-14 15:06:20
【问题描述】:
我试图使用我在这里找到的这个函数来实现我的反应应用程序的动态重新渲染: https://stackoverflow.com/a/19014495/7838374
function useWindowSize() {
const [size, setSize] = useState([0, 0]);
useLayoutEffect(
() => {
function updateSize() {
setSize([window.innerWidth, window.innerHeight]);
}
window.addEventListener("resize", updateSize);
updateSize();
return () => window.removeEventListener("resize", updateSize);
},[]);
return size;
}
function ShowWindowDimensions(props) {
const [width, height] = useWindowSize();
return (
<span>
Window size: {width} x {height}
</span>
);
}
链接到我的应用程序: https://github.com/Intetra/aubreyw
当我在桌面上的浏览器中显示我的应用程序时,我能够让一切正常运行。我正在使用 expo 来运行应用程序。当我尝试在我的 android 手机上运行该应用程序时,问题就来了。我在启动时遇到错误。
组件异常:window.addEventListener 不是函数
我能够使用我在这里找到的解决方案让它工作: https://stackoverflow.com/a/61470685/7838374
那个解决方案说在 react native 中不存在 window 的事件监听器,所以我们必须模拟它。我不明白那是什么意思。我仍然不知道为什么我找到的解决方案有效。我想了解。有人可以启发我吗?
【问题讨论】:
-
您想从 react-native 导入维度并使用 Dimensions.addEventListener 来完成。但是你也需要去抖动这个东西。它有点复杂,但你可以谷歌它。 Debounce 意味着您在调整窗口大小后稍等片刻,然后再计算调整大小,否则它将尝试每秒调整 60 次以上,这会影响性能
标签: javascript reactjs react-native