当前位置:首页 > React

react如何监测窗口

2026-01-23 18:00:49React

监测窗口大小变化

使用 useEffectuseState 结合 window.addEventListener 监听 resize 事件。在组件挂载时添加事件监听器,卸载时移除监听器。

react如何监测窗口

import { useState, useEffect } from 'react';

function useWindowSize() {
  const [windowSize, setWindowSize] = useState({
    width: window.innerWidth,
    height: window.innerHeight,
  });

  useEffect(() => {
    function handleResize() {
      setWindowSize({
        width: window.innerWidth,
        height: window.innerHeight,
      });
    }

    window.addEventListener('resize', handleResize);
    return () => window.removeEventListener('resize', handleResize);
  }, []);

  return windowSize;
}

使用自定义 Hook

将上述逻辑封装为自定义 Hook,方便在多个组件中复用。调用 useWindowSize 即可获取实时窗口尺寸。

react如何监测窗口

function MyComponent() {
  const { width, height } = useWindowSize();
  return (
    <div>
      Window width: {width}, height: {height}
    </div>
  );
}

防抖优化性能

对于频繁触发的 resize 事件,可通过防抖(debounce)减少状态更新频率。使用 lodash.debounce 或自定义防抖函数。

import { debounce } from 'lodash';

function useWindowSize() {
  const [windowSize, setWindowSize] = useState({
    width: window.innerWidth,
    height: window.innerHeight,
  });

  useEffect(() => {
    const handleResize = debounce(() => {
      setWindowSize({
        width: window.innerWidth,
        height: window.innerHeight,
      });
    }, 200);

    window.addEventListener('resize', handleResize);
    return () => {
      window.removeEventListener('resize', handleResize);
      handleResize.cancel();
    };
  }, []);

  return windowSize;
}

监听窗口滚动事件

类似地,可通过 scroll 事件监听窗口滚动位置。注意在 useEffect 清理阶段移除监听。

function useWindowScroll() {
  const [scrollY, setScrollY] = useState(window.scrollY);

  useEffect(() => {
    const handleScroll = () => setScrollY(window.scrollY);
    window.addEventListener('scroll', handleScroll);
    return () => window.removeEventListener('scroll', handleScroll);
  }, []);

  return scrollY;
}

注意事项

  • SSR 兼容性:在服务端渲染(SSR)时,window 对象不存在,需通过条件判断避免报错。
  • 性能影响:高频事件(如 resizescroll)可能引发性能问题,务必在组件卸载时移除监听器。

标签: 窗口react
分享给朋友:

相关文章

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

react架构如何

react架构如何

React 架构核心概念 React 的架构围绕组件化、虚拟 DOM 和单向数据流设计。组件是构建用户界面的独立模块,分为函数组件和类组件。虚拟 DOM 通过高效的 Diff 算法减少直接操作真实 D…

react如何读

react如何读

React 的发音 React 的发音为 /riˈækt/(音标),读作“瑞-艾克特”。其中: “Re” 发音类似英文单词 “read” 的开头部分。 “act” 发音与英文单词 “act” 一致。…

如何创建react

如何创建react

创建React项目的步骤 使用Create React App工具快速搭建React项目。确保已安装Node.js(版本需≥14.0.0)和npm(版本需≥5.6)。 打开终端或命令行工具,运行以下…

react如何遍历

react如何遍历

遍历数组或对象的方法 在React中,遍历数组或对象通常用于渲染列表或动态生成内容。以下是几种常见的遍历方法: 使用map遍历数组map是遍历数组并返回新数组的高阶函数,适合渲染列表。…

react 如何调试

react 如何调试

调试 React 应用的方法 使用 React Developer Tools 安装 Chrome 或 Firefox 的 React Developer Tools 扩展,可以检查组件树、状态和 p…