当前位置:首页 > React

react如何触发resize事件

2026-01-24 22:30:29React

监听窗口 resize 事件

在 React 中监听窗口的 resize 事件,可以通过 useEffect 钩子实现。在组件挂载时添加事件监听器,并在卸载时移除。

react如何触发resize事件

import React, { useEffect, useState } from 'react';

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

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

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

  return (
    <div>
      Window size: {windowSize.width} x {windowSize.height}
    </div>
  );
}

手动触发 resize 事件

如果需要手动触发 resize 事件,可以通过 window.dispatchEvent 模拟事件。

react如何触发resize事件

const triggerResize = () => {
  window.dispatchEvent(new Event('resize'));
};

// 调用 triggerResize() 即可触发 resize 事件

监听元素 resize 事件

对于特定 DOM 元素的尺寸变化,可以使用 ResizeObserver API。React 中可以通过 useRefuseEffect 结合实现。

import React, { useEffect, useRef, useState } from 'react';

function Component() {
  const ref = useRef(null);
  const [dimensions, setDimensions] = useState({ width: 0, height: 0 });

  useEffect(() => {
    const observer = new ResizeObserver((entries) => {
      const { width, height } = entries[0].contentRect;
      setDimensions({ width, height });
    });

    if (ref.current) {
      observer.observe(ref.current);
    }

    return () => {
      if (ref.current) {
        observer.unobserve(ref.current);
      }
    };
  }, []);

  return (
    <div ref={ref}>
      Element size: {dimensions.width} x {dimensions.height}
    </div>
  );
}

优化性能

频繁的 resize 事件可能影响性能,可以通过防抖(debounce)或节流(throttle)优化。

import { throttle } from 'lodash';

// 在 useEffect 中使用节流
useEffect(() => {
  const handleResize = throttle(() => {
    setWindowSize({
      width: window.innerWidth,
      height: window.innerHeight,
    });
  }, 200);

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

注意事项

  • 避免在 render 中直接添加事件监听,可能导致内存泄漏。
  • 使用 ResizeObserver 时注意浏览器兼容性,必要时引入 polyfill。
  • 移除事件监听或观察器是必要的,防止组件卸载后继续执行回调。

标签: 事件react
分享给朋友:

相关文章

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app np…

react如何更新

react如何更新

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

如何创建react

如何创建react

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

react 如何调试

react 如何调试

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

react如何安装

react如何安装

安装React的步骤 确保已安装Node.js(建议版本12或更高),可通过以下命令检查版本: node -v npm -v 使用Create React App快速搭建项目(推荐): npx c…

react 如何debug

react 如何debug

React 调试方法 使用 React Developer Tools React Developer Tools 是浏览器扩展,支持 Chrome 和 Firefox。安装后,可以在开发者工具中查看…