更新: Android 6.0上出现此问题。
在my React Native app中,我有一个ScrollView显示二维码,一个在...
时间。 ScrollView使用pagingEnabled={true}
,因此它始终显示
只有一个QR码居中。
我也在使用Redux storage来记住
如果存储中没有代码,则在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。