渲染后将原生重置 ScrollView 反应到顶部

Posted

技术标签:

【中文标题】渲染后将原生重置 ScrollView 反应到顶部【英文标题】:React native reset ScrollView to the top after render 【发布时间】:2021-09-16 00:22:09 【问题描述】:

当用户导航离开然后返回屏幕时,我正在尝试将 Scrollview 重置回顶部。目前,当我向下滚动并单击远离屏幕的不同选项卡时,当我返回上一个屏幕时,滚动条与我在上次滚动条中离开的位置相同。我的带有钩子 useRef 和 useEffect 的解决方案似乎不起作用,我也无法获得滚动的当前位置。 您可以在snack.expo 上查看这项工作的原型:

https://snack.expo.io/@flag81/scrolltotop

先谢谢了。

【问题讨论】:

【参考方案1】:

如果你正在使用 react-navigation(很可能是这样),我会使用 react-navigation 的钩子 useIsFocused

https://reactnavigation.org/docs/use-is-focused/

在你的标签中导入钩子

import  useIsFocused  from "@react-navigation/native";

然后为您的 ScrollView 使用 ref

const scrollViewRef = useRef<ScrollView>();

然后使用钩子和useEffect一起重置

const isFocused = useIsFocused();
useEffect(() => 
    if (isFocused) 
        scrollViewRef.current?.scrollTo(0, 0, true);
    
, [isFocused]);

【讨论】:

以上是关于渲染后将原生重置 ScrollView 反应到顶部的主要内容,如果未能解决你的问题,请参考以下文章

在渲染时将滚动反应到顶部——通常的答案似乎不起作用

当状态/道具改变时,反应原生动画部分列表跳到顶部

Android ScrollView 滚动到顶部

Android的FixScrollView自定义控件

SwiftUI ScrollView滚动到顶部[重复]

如何让 ScrollView 在 python 中重置到屏幕顶部