当前位置:首页 > React

react如何检测窗口

2026-03-30 19:50:51React

检测窗口变化的方法

使用 window.addEventListener

在React中监听窗口变化可以通过原生JavaScript的window.addEventListener实现。通常在useEffect中设置监听器,并在组件卸载时移除。

import { useEffect } from 'react';

function useWindowResize() {
  useEffect(() => {
    const handleResize = () => {
      console.log(window.innerWidth, window.innerHeight);
    };

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

自定义Hook封装

将窗口尺寸检测逻辑封装为自定义Hook,便于复用。返回当前窗口尺寸的实时状态。

react如何检测窗口

import { useState, useEffect } from 'react';

function useWindowSize() {
  const [size, setSize] = useState({
    width: window.innerWidth,
    height: window.innerHeight,
  });

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

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

  return size;
}

使用第三方库

若需复杂功能(如防抖、响应式断点),可使用react-use@react-hook/resize-observer等库简化实现。

react如何检测窗口

import { useWindowSize } from 'react-use';

function Component() {
  const { width, height } = useWindowSize();
  return <div>Window size: {width}x{height}</div>;
}

断点检测实现

结合CSS断点检测窗口宽度范围,常用于响应式设计。

function useBreakpoint() {
  const [breakpoint, setBreakpoint] = useState('');

  useEffect(() => {
    const checkBreakpoint = () => {
      const width = window.innerWidth;
      if (width < 768) setBreakpoint('mobile');
      else if (width < 1024) setBreakpoint('tablet');
      else setBreakpoint('desktop');
    };

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

  return breakpoint;
}

性能优化

高频事件如resize需使用防抖(debounce)或节流(throttle)减少性能损耗。

import { useEffect } from 'react';
import { debounce } from 'lodash';

function useDebouncedResize(callback, delay = 100) {
  useEffect(() => {
    const debouncedCallback = debounce(callback, delay);
    window.addEventListener('resize', debouncedCallback);
    return () => {
      debouncedCallback.cancel();
      window.removeEventListener('resize', debouncedCallback);
    };
  }, [callback, delay]);
}

标签: 窗口react
分享给朋友:

相关文章

react native如何启动

react native如何启动

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

react如何衰减

react如何衰减

React 中的动画衰减效果实现 在 React 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyfra…

react 如何跳转

react 如何跳转

使用 React Router 进行页面跳转 React 应用中通常使用 react-router-dom 库实现页面跳转。以下是几种常见的跳转方式: 安装依赖 npm install react…

react项目如何

react项目如何

创建React项目 使用create-react-app工具快速初始化项目。确保已安装Node.js(建议版本≥12.0.0),运行以下命令生成新项目: npx create-react-app m…

react 如何循环

react 如何循环

循环渲染列表 在React中,循环渲染列表通常使用map方法。map可以遍历数组并返回一个新的React元素数组。 const items = ['Apple', 'Banana', 'Orange…

react如何折叠

react如何折叠

在 React 中实现折叠功能 使用 useState 管理折叠状态 通过 useState 定义一个状态变量来控制折叠面板的显示与隐藏。例如: const [isCollapsed, setIsC…