Android 加载Redux存储后,在ScrollView中响应本机:scrollTo()

Android 加载Redux存储后,在ScrollView中响应本机:scrollTo(),android,react-native,redux,scrollview,Android,React Native,Redux,Scrollview,更新:问题发生在Android 6.0上 在中,我有一个二维码,一个在 时间ScrollView使用PaginEnabled={true},因此始终显示 正好有一个二维码 我也在用记忆 显示当前二维码的索引 二维码本身(例如,它们编码的值) 如果存储器中没有代码,则在减速器中设置2个默认初始代码 目标是: 启动应用程序时,我希望显示与上次关闭应用程序时相同的代码。这意味着滚动偏移量应设置为此代码 问题是: 启动后,应用程序将只滚动到第一个或第二个代码,而不会滚动到任何更高的代码。例如,如果我

更新:问题发生在Android 6.0上

在中,我有一个二维码,一个在 时间ScrollView使用
PaginEnabled={true}
,因此始终显示 正好有一个二维码

我也在用记忆

  • 显示当前二维码的索引
  • 二维码本身(例如,它们编码的值)
如果存储器中没有代码,则在减速器中设置2个默认初始代码

目标是: 启动应用程序时,我希望显示与上次关闭应用程序时相同的代码。这意味着滚动偏移量应设置为此代码

问题是: 启动后,应用程序将只滚动到第一个或第二个代码,而不会滚动到任何更高的代码。例如,如果我上次显示的二维码有
index=3
,我仍然只会看到第二个二维码

我的分析/假设出了什么问题 当我的应用程序启动时,最初(几毫秒内)没有代码 从存储中可用,因此应用程序以2个默认初始值呈现 一个。显然,在这段时间内,滚动被尝试,因此它在第一个代码处停止,并且这个索引被记住

然而:

My
scrollToCurrentCode()
函数在
componentDidUpdate
处调用。在 在这一点上,正如我所看到的,代码已经从存储器中加载了 通过
console.log()

但是,第2条:

load(store)。然后((newState)=>{console.log('loaded');})
将在 最后,即使在
componentdiddupdate
之后。所以也许整个装载过程 需要一段时间吗?如果是,我如何推迟触发
componentdiddupdate
加载实际发生后

下面是控制台的完整摘录,以及我的一些评论:

  render                // First render with initial data.
  componentDidMount
  render                // Second render with data from storage.
  componentDidUpdate    // Now I want to scroll to the code.
  codes.length 5        // These are the proper codes from the storage.
  currentCodeIndex 3    // Also the correct index is thre.
  loaded                // This comes from load(store).then()
  render                // Another render starts, triggered from scrollToCurrentCode()
  componentDidUpdate
  codes.length 5
  currentCodeIndex 1
我知道这可能是一个非常复杂的问题,我尽力解释了。
以下是在
主屏幕的
组件中调用
scrollToCurrentCode()
时发生的情况。这正是我所做的。问题仍然存在:它确实只滚动到第二个代码,好像没有更多的可用代码。我现在发现了一个使用setTimeout的黑客“解决方案”:(似乎我的问题基本上是:如何设置ScrollView的初始偏移量?这看起来好像没有正确的解决方案:延迟听起来确实有问题。可能是某些原因导致渲染延迟。您可以尝试使用
InteractionManager.runAfterInteractions
包装它。