自定义hooks实现监控页面高度

实现一个简单的功能,监听页面高度,把他维护为公共组件,其他想使用的组件都可调用。

1. 和写功能一样,写好这个功能的代码逻辑。

       只要注意use开头,最后导出即可

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

// 自定义hooks,要以use开头
function useWinSize() {
    
    const [size, setSize] = useState({
        height: doucument.documentElement.clientHeight,
        width: doucument.documentElement.clientWidth,
    });

/* useCallback 的作用在于利用 memoize 减少无效的 re-render,来达到性能优化的作用。但是,“不要过早的性能优化”。从实际开发的经验来看,在做这类性能优化时,一定得观察比较优化的结果,因为某个小角落的 callback 就可能导致优化前功尽弃,甚至是适得其反。
这里可以直接去掉
*/

    const handleResize =useCallback (() => {
        setWindowSize({
            height: doucument.documentElement.clientHeight,
            width: doucument.documentElement.clientWidth,
        });
    };[]) 

    useEffect(() => {
        // 监听
        window.addEventListener('resize', handleResize);
        
        // 销毁
        return () => window.removeEventListener('resize', handleResize)
    }, []);

    return size;
}

//导出这个钩子
export default useWinSize;

2. 然后其他页面直接调用即可:

import useWinSize from './路径';

//引入自定义的hook
const sizes=useWinSize();

retrun(
    
    //页面直接调用即可

    <p>
        页面size:{ sizes.width} * { sizes.height}
    </p>
);

是不是还挺容易的~~,其实感觉它和高阶组件差不太多,只是可能场景不同,用哪个方便的区别。 

2021最后一篇博文了,感谢自己一年的努力,收获很多~ 

希望自己在新的一年可以静下心来,沉淀更多东西,也希望自己的愿望都可以实现,一直快乐,疯狂加薪!hahaha~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值