javascript - 使用 useRef 在 React Hooks 中恢复滚动位置不稳定
问题描述
我想通过在 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 (
...
);
}
在状态更新时,我想通过没有这种“不稳定”的行为来改回以前的窗口位置。(摇摇晃晃的意思是看起来他滚动到顶部,然后滚动到上一个位置,所以看起来它在摇晃)
解决方案
如果我理解正确,请使用useLayoutEffect
而不是useEffect
. 这将在渲染组件之前滚动回顶部。记得添加依赖数组。
推荐阅读
- javascript - 如何将元素(在可编辑的div内)从光标位置分成两部分,然后在它之间插入一个自定义元素?
- firebase - 如何从 Firebase Cloud 功能向我的项目 API 发出 http 请求?
- python - Pygame应用程序未打开png
- unity3d - 围绕点旋转对象并沿正弦函数移动它
- spring-boot - 在关键的 Cloud Foundry 中使用受信任的 SSL 证书和 Spring Boot
- regex - 字符之间的正则表达式匹配
- javascript - 如何映射数组并使用索引以消除空值?
- java - 为什么 Java 和 Kotlin 对已弃用的方法显示不同的警告?
- android - 防止提交重复片段后,现有片段正在消失
- loops - 理解 Python 中嵌套循环的控制结构