我希望在React元素呈现之后立即滚动到指定的水平位置。为了了解上下文,我正在使用具有服务器端渲染的Next.js,因此useLayoutEffect
不是一个选项。
export default function WideElement () {
const ref = useRef(null)
useEffect(function () {
ref.current.scrollLeft = 1000
}, [])
return (
<Container ref={ref}>
...
</Container>
)
}
然而,以上代码在页面加载时不会滚动。在这里,
...
表示一个长列表的子元素,它们水平堆叠并溢出容器。我注意到,如果我对滚动施加一定的人为延迟,它似乎可以正常工作,并且
Container
立即向左滚动1000像素。export default function WideElement () {
const ref = useRef(null)
useEffect(function () {
setTimeout(function() {
ref.current.scrollLeft = 1000
}, 1000)
}, [])
return (
<Container ref={ref}>
...
</Container>
)
}
我觉得我可能误解了useEffect
。我错在哪里,如何使其正常工作?