javascript - 使用 useRef 和窗口调整大小事件(React Hook)的观察者 div 元素大小/维度
问题描述
我正在尝试使用 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>
);
}
注意:重新渲染整个应用程序会更新尺寸,但我不想刷新整个页面以获得正确的尺寸。
解决方案
如果您想使用 refs(或者甚至使用原始元素)来测量某些元素的大小,那么我推荐这个库: https ://github.com/ZeeCoder/use-resize-observer
如果你想专门测量窗口的大小,那么最好使用这样的东西:https ://github.com/jaredLunde/react-hook/tree/master/packages/window-size#readme
推荐阅读
- asp.net-core - OData 如何使用 Simple.Odata.V4.Client 插入带有相关数据的新记录
- amazon-s3 - 使用 AWSSDK.S3 通过 .net-core 将文件上传到 IBM COS(S3 兼容)
- python - 通过熊猫曲线识别“相似”数据集
- html - 将 TD Align="center" 转换为 CSS
- c++ - 在 C++ 中解析整个(开始到结束)字符串,包括所有空格
- .net - 如何设置固定到任务栏的应用程序的 AppUserModelId?
- python - 如何在 Odoo 中向 One2many 字段添加约束?
- r - 如何根据 shinymanager 凭据禁用闪亮功能
- c - 将所有列表值更改为最后一个值
- ruby - lita bot 对触发器没有响应