react项目解决浏览器窗口变化重新加载的问题

useEffect, useState, useCallback解决浏览器窗口变化加载问题


初步接触react项目遇到很多问题,这里记录分享一下问题以及解决方法。
f12,切换移动端浏览模式,浏览器窗口变小,项目样式就乱了
在这里插入图片描述
需要手动刷新重新加载之后恢复正常.
在这里插入图片描述
为了解决这一问题,看了下文档,自己琢磨找到了解决办法。

1、首先全局layouts/index.jsx引入useEffect, useState, useCallback

import React, { useEffect, useState, useCallback } from "react";

2、封装一个监听设置resize的方法

function useWindowSize() {
  const isClient = typeof window === 'object';
  const getSize = useCallback(() => {
    return {
      width: isClient ? window.innerWidth : undefined,
      height: isClient ? window.innerHeight : undefined
    };
  }, [isClient])
  
  const [windowSize, setWindowSize] = useState(getSize);
  useEffect(() => {
    if (!isClient) {
      return false;
    }
    function handleResize() {
      setWindowSize(getSize());
    }
    window.addEventListener('resize', handleResize);
    return () => window.removeEventListener('resize', handleResize);
  }, [getSize, isClient]);
  return windowSize;
}

3、最后加入渲染设置样式

function BasicLayout(props) {
  const clientHeight = useWindowSize().height;
  return (
    <div className={styles.normal} style={{height: clientHeight}}>
      <Header/>
      {props.children}
      <Bottom/>
    </div>
  );
}

export default BasicLayout;

这样无论窗口怎么变化样式就不会乱了,其实就是一个窗口变化,自动重加载的过程。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值