【发布时间】:2019-11-06 08:59:18
【问题描述】:
我想在每次渲染时测量 React Native View 的大小,并将其保存到状态。如果元素布局没有改变效果不应该运行。
使用基于类的组件很容易,可以使用onLayout。但是在使用 React Hooks 的功能组件中我该怎么做呢?
我读过useLayoutEffect。如果这是要走的路,你有一个如何使用它的例子吗?
我制作了这个名为 useDimensions 的自定义钩子。这是我已经走了多远:
const useDimensions = () => {
const ref = useRef(null);
const [dimensions, setDimensions] = useState({});
useLayoutEffect(
() => {
setDimensions(/* Get size of element here? How? */);
},
[ref.current],
);
return [ref, dimensions];
};
然后我使用钩子并将 ref 添加到我想要测量其尺寸的视图中。
const [ref, dimensions] = useDimensions();
return (
<View ref={ref}>
...
</View>
);
我尝试调试ref.current,但没有发现任何有用的东西。我还在效果挂钩中尝试了measure():
ref.current.measure((size) => {
setDimensions(size); // size is always 0
});
【问题讨论】: