当前位置:首页 > React

react如何触发resize事件

2026-01-24 22:30:29React

监听窗口 resize 事件

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

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 模拟事件。

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如何触发resize事件

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

相关文章

实现Vue事件总线

实现Vue事件总线

使用 EventBus 实现全局事件通信 在 Vue 中,可以通过创建一个独立的 Vue 实例作为事件总线(EventBus)来实现组件间的通信。这种方法适用于非父子组件或跨层级组件之间的通信。…

react native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: nod…

react如何取消渲染

react如何取消渲染

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

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment 基本…

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 运行以下命令查看项目中安装的 React 当前版本: npm list react 或 yarn list react 修…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…