javascript - react 钩子(Hook) useEffect 更新 window.innerHeight

标签 javascript reactjs react-hooks

我想在调整屏幕大小时使用内部窗口高度更新状态。当我在 useEffect 中记录状态高度时钩子(Hook)我每次都得到 0 但是,当我登录 updateWindowDimensions 时函数高度值按预期更新。

如何每次都使用新值更新状态?

const [height, setHeight] = useState(0);

const updateWindowDimensions = () => {
    const newHeight = window.innerHeight;
    setHeight(newHeight);
    console.log('updating height');   
};

 useEffect(() => {
     window.addEventListener('resize', updateWindowDimensions);
     console.log("give height", height);
 }, []);

最佳答案

您的 useEffect仅在组件挂载时运行一次(因为空数组 [] 您作为第二个参数传递)

如果您只是在它之外登录,您将看到您的状态值正在正确更新

  const [height, setHeight] = useState(0);

  useEffect(() => {
    const updateWindowDimensions = () => {
      const newHeight = window.innerHeight;
      setHeight(newHeight);
      console.log("updating height");
    };

    window.addEventListener("resize", updateWindowDimensions);

    return () => window.removeEventListener("resize", updateWindowDimensions) 

  }, []);

  console.log("give height", height);

此外,您应该将该函数的声明移到 useEffect 中。所以它不会在每次渲染时重新声明

关于javascript - react 钩子(Hook) useEffect 更新 window.innerHeight,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60642486/

相关文章:

javascript - 在指定的超时时间内未调用 jasmine 异步回调

javascript - 如何使用asp.net和html页面发送电子邮件

javascript - React SideEffect 脱离 useEffect 钩子(Hook)

javascript - 仅当我从主页启动流程时组件才会呈现

javascript - 如何重写将另一个类扩展为功能组件的 React 类?

reactjs - Hook : combine multiple reducers when using useReducer?

javascript - 如何使用 lodash 有效地合并两个日期对象数组

javascript - 使用 jsPDf 将网页导出为 PDF

javascript - ReactJS 应用程序的开发控制台中出现警告

javascript - this.state.data.map 不是一个函数,即使我有一个数组,也会继续显示