当前位置:首页 > 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

安装 Node.js 和 npm React 项目依赖 Node.js 环境,需先安装 Node.js(自带 npm)。访问 Node.js 官网 下载 LTS 版本,运行安装程序并完成配置。安装后,…

react native如何启动

react native如何启动

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

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在 s…

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

react如何验证

react如何验证

表单验证方法 在React中验证表单数据通常使用以下几种方式: 内置HTML5验证 利用HTML5原生表单验证属性如required、pattern等,结合form.noValidate属性禁用浏览…

react如何encode

react如何encode

React 中编码的实现方式 在 React 中,编码通常涉及对 URL、HTML 实体或特殊字符的处理。以下是几种常见的编码方法: 使用 encodeURIComponent 进行 URL 编码…