【发布时间】:2021-03-05 14:20:00
【问题描述】:
我正在尝试在 React 中获取元素的 x 和 y。我可以使用 DOMRect 做到这一点,但不是在第一次渲染中。这就是我现在的代码:
const Circle: React.FC<Props> = ({ children }: Props) => {
const context = useContext(ShuffleMatchContext);
const circle: React.RefObject<HTMLDivElement> = useRef(null);
const { width, height } = useWindowDimensions();
useEffect(() => {
const rect = circle.current?.getBoundingClientRect();
context.setQuestionPosition({
x: rect!.x,
y: rect!.y,
});
}, [width, height]);
return (
<>
<Component
ref={circle}
>
<>{children}</>
</Component>
</>
);
};
export default Circle;
问题在于,在第一次渲染时,domRect 对其中的所有内容都返回 0。我认为这种行为会发生,因为在第一次渲染中,您还没有准备好所有父组件。我使用了一个名为“useWindowDimensions”的钩子,事实上,当您调整屏幕大小时,domRect 返回预期值。有人可以帮忙吗?
【问题讨论】:
-
对于这种情况,您可以使用 useLayoutEffect。本质上是一样的,只不过是在构建DOM的时候触发,所以会定义ref。
标签: reactjs dom react-hooks use-effect usecallback