You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中未调用setHeight,为何刷新后height会随屏幕尺寸更新?

React中未调用setHeight却刷新后height值变化的原因及解决办法

你看到的现象是因为useState的初始值仅在组件首次渲染时赋值一次。当你刷新页面时,整个组件会重新初始化,此时window.innerHeight会读取当前屏幕的高度,所以height会显示新的数值。但如果不刷新页面,只是调整窗口大小,height不会自动更新——因为你没有监听窗口的resize事件去调用setHeight更新状态。

你的原代码:

import React, { useState } from "react";
import "./styles.css";

export default function App() {
  const [height, setHeight] = useState(window.innerHeight);

  return (
    <div className="App">
      <h1>{height}</h1>
    </div>
  );
}

要实现窗口大小变化时自动更新height,需要添加resize事件监听,用useEffect处理监听的添加与移除:

import React, { useState, useEffect } from "react";
import "./styles.css";

export default function App() {
  const [height, setHeight] = useState(window.innerHeight);

  useEffect(() => {
    // 定义更新高度的函数
    const updateHeight = () => {
      setHeight(window.innerHeight);
    };
    // 监听窗口resize事件
    window.addEventListener("resize", updateHeight);
    // 组件卸载时移除监听,避免内存泄漏
    return () => {
      window.removeEventListener("resize", updateHeight);
    };
  }, []);

  return (
    <div className="App">
      <h1>{height}</h1>
    </div>
  );
}

这段代码的逻辑:

  • useEffect的空数组依赖确保监听只在组件挂载时添加一次
  • 窗口大小变化时,updateHeight函数会触发setHeight更新状态,组件随之重新渲染显示新的高度
  • 返回的清理函数会在组件卸载时移除事件监听,防止不必要的内存占用

内容的提问来源于stack exchange,提问作者Chandra Mohan Srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:45:30