【发布时间】:2019-12-06 20:30:50
【问题描述】:
我想通过在 useEffect 中将窗口位置设置回之前的状态来滚动到之前的窗口位置。为了获得之前的状态,我使用了 useRef。
该组件曾经是基于类的,并且可以完美运行。在我将它重构为钩子之后,这种“不稳定”的行为就开始了。
在开头声明useRef
const scrollRef = useRef(window.pageYOffset);
每当组件重新渲染时:
scrollRef.current = window.pageYOffset;
状态更新时:
useEffect(() => {
window.scrollTo(0, scrollRef.current)
});
完整代码:
export default () => {
const scrollRef = useRef(window.pageYOffset);
...
scrollRef.current = window.pageYOffset;
useEffect(() => {
window.scrollTo(0, scrollRef.current)
});
return (
...
);
}
在状态更新时,我想通过没有这种“摇晃”的行为来改回之前的窗口位置。 (摇摇晃晃的意思是看起来他滚动到顶部,然后滚动到上一个位置,所以看起来它在摇晃)
【问题讨论】:
-
尝试添加沙盒
标签: javascript reactjs react-hooks