当前位置:首页 > React

react如何获取浏览器的高度

2026-01-26 03:13:17React

获取浏览器高度的方法

在React中获取浏览器窗口高度可以通过监听window对象的resize事件,并使用window.innerHeight属性实现。

react如何获取浏览器的高度

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

function WindowHeightTracker() {
  const [windowHeight, setWindowHeight] = useState(window.innerHeight);

  useEffect(() => {
    const handleResize = () => {
      setWindowHeight(window.innerHeight);
    };

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

  return <div>当前浏览器高度: {windowHeight}px</div>;
}

自定义Hook封装

可以将获取窗口高度的逻辑封装成自定义Hook,方便复用。

react如何获取浏览器的高度

import { useState, useEffect } from 'react';

function useWindowHeight() {
  const [height, setHeight] = useState(window.innerHeight);

  useEffect(() => {
    const handleResize = () => setHeight(window.innerHeight);
    window.addEventListener('resize', handleResize);
    return () => window.removeEventListener('resize', handleResize);
  }, []);

  return height;
}

// 使用示例
function App() {
  const height = useWindowHeight();
  return <div>窗口高度: {height}px</div>;
}

服务端渲染(SSR)兼容方案

在服务端渲染环境中,window对象不存在,需要添加条件判断防止报错。

function useWindowHeight() {
  const [height, setHeight] = useState(
    typeof window !== 'undefined' ? window.innerHeight : 0
  );

  useEffect(() => {
    if (typeof window === 'undefined') return;

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

  return height;
}

性能优化建议

频繁触发resize事件会影响性能,可以使用防抖(debounce)技术优化。

import { useState, useEffect } from 'react';

function useDebounce(value, delay) {
  const [debouncedValue, setDebouncedValue] = useState(value);

  useEffect(() => {
    const handler = setTimeout(() => {
      setDebouncedValue(value);
    }, delay);

    return () => {
      clearTimeout(handler);
    };
  }, [value, delay]);

  return debouncedValue;
}

function useWindowHeight() {
  const [height, setHeight] = useState(
    typeof window !== 'undefined' ? window.innerHeight : 0
  );

  useEffect(() => {
    if (typeof window === 'undefined') return;

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

  const debouncedHeight = useDebounce(height, 100);
  return debouncedHeight;
}

标签: 高度浏览器
分享给朋友:

相关文章

vue实现动态高度抖动

vue实现动态高度抖动

实现动态高度抖动的方案 在Vue中实现动态高度抖动效果,可以通过CSS动画或JavaScript动画库实现。以下是几种常见方法: 使用CSS关键帧动画 通过定义@keyframes创建抖动动画,动态…

react如何获取div的高度

react如何获取div的高度

使用 useRef 和 useEffect 获取 Div 高度 在 React 中,可以通过 useRef 钩子创建一个引用,并将其附加到目标 div 上。结合 useEffect 钩子,在组件挂载或…

React如何获取元素内部高度

React如何获取元素内部高度

获取元素内部高度的方法 在React中获取元素的内部高度(即clientHeight)可以通过以下几种方式实现: 使用useRef钩子 通过useRef创建一个引用,绑定到目标元素上,再通过clie…

react如何获取无状态组件高度

react如何获取无状态组件高度

获取无状态组件高度的方法 在React中,无状态组件(函数组件)本身没有实例,因此无法直接通过ref获取DOM元素的高度。以下是几种可行的解决方案: 使用useRef和useEffect钩子 通过R…

如何让react浏览器支持

如何让react浏览器支持

让React应用支持不同浏览器的关键方法 使用Babel转译代码 通过配置Babel将现代JavaScript语法(如ES6+)转换为向后兼容的版本。安装@babel/preset-env并根据.br…