当前位置:首页 > 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如何安装

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

如何提高react

如何提高react

优化性能 使用React.memo对组件进行记忆化处理,避免不必要的重新渲染。对于类组件,可以使用PureComponent来达到类似效果。 利用useMemo缓存计算结果,避免重复计算。对于函数或…

react如何发布

react如何发布

发布React应用的步骤 构建生产版本 使用以下命令生成优化后的生产版本代码,代码会被压缩并移除开发环境中的调试工具: npm run build 构建完成后会生成build文件夹,包含所有静态资源…

java如何react

java如何react

在Java中使用React 要在Java项目中集成React,通常需要将React前端与Java后端结合使用。以下是几种常见的方法: 使用Spring Boot作为后端 Spring Boot是一个…

react如何绑定事件

react如何绑定事件

React 事件绑定方法 在 React 中绑定事件有多种方式,以下是常见的几种方法: 使用 onClick 或其他事件属性直接绑定 <button onClick={() => co…

如何读react源码

如何读react源码

理解React源码的结构 React源码托管在GitHub上,主要分为几个核心模块:react、react-dom、react-reconciler等。react包包含核心API和组件逻辑,react…