React useRef 滚动仅在 setTimeout 内工作

mit*_*med 5 reactjs react-hooks

我正在尝试在反应应用程序上使用scrollIntoView,因此在页面中我使用它

useEffect(() => {
  myRef.current.scrollIntoView({ behavior: 'smooth' });
}, [myRef, selectedSectionIndex, modalOpen]);
Run Code Online (Sandbox Code Playgroud)

它几乎适用于所有情况,因为我已经与ref={myRef}我想要查看的元素相关联。然而,在其中一个转换中,即使调用该代码,它也不会执行任何操作(甚至不会引发错误)。仅当我将其更改为

useEffect(() => {
  setTimeout(() => myRef.current.scrollIntoView({ behavior: 'smooth' }), 0);
}, [myRef, selectedSectionIndex, modalOpen]);
Run Code Online (Sandbox Code Playgroud)

我读过类似的问题,这就是我实际尝试此解决方案的原因。但无法真正指出这是如何解决的。我一直在阅读,当第一个代码运行时,引用的 dom 元素可能尚未呈现,但是

A。为什么会出现在第二个呢?b. 将调试器放在该行上方,我可以看到该元素存在于 DOM 中,如果我释放调试器,则更是如此,同样并且默默地执行任何操作,但如果我跨过并运行该行,它实际上会滚动。编辑:我附上屏幕截图调试器的,如果我按 f8 则什么也不做,如果我按 f10 它会滚动

我想有一种更干净的方法来完成这项工作,但找不到它

谢谢

myRef.current