当前位置:首页 > 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.memo 进行组件记忆 React.memo 是一个高阶组件,用于缓存函数组件的渲染结果,避免不必要的重新渲染。只有当组件的 props 发生变化时,才…

react 如何执行

react 如何执行

安装 Node.js 和 npm React 开发需要 Node.js 环境,因为它提供了 npm(或 yarn)包管理工具。从 Node.js 官网 下载并安装最新 LTS 版本。安装完成后,在终端…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元…

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

如何选购react

如何选购react

选购 React 相关产品或服务的建议 React 是一个用于构建用户界面的 JavaScript 库,广泛应用于前端开发。以下是选购 React 相关产品(如课程、书籍、工具、组件库等)的参考方法:…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Contex…