【发布时间】:2022-01-28 12:12:29
【问题描述】:
我有一个反应组件,我想在其中存储一个状态的 div 的宽度。我正在使用以下代码(从我的项目中提取):
const Test = (): JSX.Element => {
const ref = useRef<HTMLDivElement>(null);
const [width, setWidth] = useState(123);
useEffect(() => {
setTimeout(() => {
const width = ref.current?.clientWidth || 321;
setWidth(() => width);
}, 1000);
setTimeout(() => {
console.error(width);
}, 2000);
}, []);
...
return (
<div ref={ref}>Test</div>
);
}
运行它时,在控制台中我看到打印的值123(宽度的原始值)而不是实际宽度或321。
我确信我在做一些愚蠢的事情,但我已经盯着这段代码看了很长时间了。所以,希望有人能帮忙!
(我使用setTimeout 的原因是我在某个地方读到过,如果你马上得到ref.current.clientWidth,有时你不会得到正确的值。
【问题讨论】:
标签: typescript react-hooks timeout use-effect use-state