React Native:加载Redux存储后ScrollView中的scrollTo()

时间:2017-04-15 21:59:07

标签: android react-native redux scrollview

更新: Android 6.0上出现此问题。

my React Native app中,我有一个ScrollView显示二维码,一个在... 时间。 ScrollView使用pagingEnabled={true},因此它始终显示 只有一个QR码居中。

我也在使用Redux storage来记住

  • 显示当前QR码的索引
  • QR码本身(例如,它们编码的值)

如果存储中没有代码,则在reducer中设置2个默认初始代码。

目标:

当我启动应用程序时,我想要在应用程序关闭时显示与上次显示的代码相同的代码。这意味着滚动偏移应设置为此代码。

问题:

启动后,应用程序只会滚动到第一个或第二个代码,但永远不会更高。例如,如果我上次显示的QR码有index=3,我仍然只会看到第二个QR码。

我的分析/假设出了什么问题

当我的应用程序启动时,首先(几毫秒)没有代码 可从存储中获取,因此应用程序使用2默认初始值进行渲染 那些。显然在此期间,尝试滚动,因此它会在第一个代码处停止,并且会记住此索引。

然而:

我的scrollToCurrentCode()函数在componentDidUpdate调用。在 至此,正如我所看到的,代码 已经从存储中加载 通过console.log()

但是2:

load(store).then((newState) => { console.log('loaded'); })将登录 最后,甚至在componentDidUpdate之后。也许是整个装载过程 需要一段时间?如果是这样,我怎么能推迟触发 加载实际发生后componentDidUpdate

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

  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

我知道这可能是一个非常复杂的问题,我尽力解释它。 这也是full source code of the project

0 个答案:

没有答案