useComponentSize

2020-08-14  本文已影响0人  skoll

查看每一个组件的大小

import React,{useState,useLayoutEffect}from 'react'

function getSize(el){
    if(!el){
        return {}
    }
    return {
        width:el.offsetWidth,
        height:el.offsetHeight,
    }
    // 之前求高度都是用的getComputedClientRect()这个方法
}

export default function useComponentSize(ref){
    let [size,setSize]=useState(getSize(ref.current))
    
    function handleResize(){
        if(ref&&ref.current){
            setSize(getSize(ref.current))
        }
    }

    useLayoutEffect(()=>{
        handleResize()
        // 第一次初始化就执行一遍
        
        let resizeObserver=new ResizeObserver(()=>handleResize())
        // 定义一个检测变动的状态机
        resizeObserver.observe(ref.current)
        // 把这个检测机制绑定到当前元素
        return ()=>{
            resizeObserver.disconnect(ref.current)
            resizeObserver=null
        }

    },[])

    return size
}
上一篇 下一篇

猜你喜欢

热点阅读