@loke/ui
Version:
2 lines (1 loc) • 836 B
JavaScript
import{useLayoutEffect}from"@loke/ui/use-layout-effect";import{useState}from"react";function useSize(element){let[size,setSize]=useState(void 0);return useLayoutEffect(()=>{if(element){setSize({height:element.offsetHeight,width:element.offsetWidth});let resizeObserver=new ResizeObserver((entries)=>{if(!Array.isArray(entries))return;if(entries.length===0)return;let entry=entries[0],width,height;if(entry&&"borderBoxSize"in entry){let borderSizeEntry=entry.borderBoxSize,borderSize=Array.isArray(borderSizeEntry)?borderSizeEntry[0]:borderSizeEntry;width=borderSize.inlineSize,height=borderSize.blockSize}else width=element.offsetWidth,height=element.offsetHeight;setSize({height,width})});return resizeObserver.observe(element,{box:"border-box"}),()=>resizeObserver.unobserve(element)}setSize(void 0)},[element]),size}export{useSize};