我试图使用 React Hook JS 不断地观察/检测一个 div 元素的大小。我已经尝试了不同的方法,但每次都会出现这样的一个常见问题:缩小窗口大小时,ref.current.offsetWidth
不会改变,但增大窗口时,它将会改变 ref.current.offsetWidth
的值。
以下是我的代码:
function Chart({}) {
const targetRef = useRef(null);
const [dimensions, setDimensions] = useState({width: 0, height: 0});
const updateDimensions = debounce(() => {
if(targetRef.current) {
setDimensions({
width: targetRef.current.offsetWidth,
height: targetRef.current.offsetHeight
});
}
}, 50);
useEffect(() => {
updateDimensions();
}, []);
useEffect(() => {
window.addEventListener("resize", updateDimensions);
updateDimensions();
return () => {
window.removeEventListener("resize", updateDimensions);
};
}, []);
return (
<div style={{minHeight: 250}} ref={targetRef}>
<some svg component/>
</div>
);
}
注意: 重新渲染整个应用程序将更新尺寸,但我不想刷新整个页面以获得正确的尺寸。
height: "100vh", width: "100vw"
添加到您的样式属性中,您是否会看到尺寸发生变化? - peteredhead