ReactNative 在进入新的界面,同时需要在新界面加载网络数据的时候有卡顿的现象,导致界面加载不流畅。本来以为是网络加载完成后再次渲染界面导致的。然后就想了一个办法,延迟加载数据
setTimeout(this._loadData,500)
结果还可以,但是如果有 loadingDialog 之类的东西会有一种延迟的感觉,而且写法感觉也不专业。所以百度科普了一下,ReactNative 里面有个专门管理交互的管理者:
InteractionManager
在这个类里面有个方法
runAfterInteractions
点击查看源码:
/**
* Schedule a function to run after all interactions have completed. Returns a cancellable
* "promise".
*/
runAfterInteractions(
task: ?Task,
): {
then: Function,
done: Function,
cancel: Function,
...
}
查看备注,大意为在完成所有交互后执行一个方法,还可以返回一个取消任务的对象,正好解决我们的问题,我们将我们的网络加载放到这个方法里面试试:
InteractionManager.runAfterInteractions(this._loadData)
完美解决,如此丝滑。
但是还是有个问题,我项目里面有引入 react-native-smart-tip Toast 提示在 Toast 提示没有消失之前都不会去执行数据加载,这个问题也只能在进入新界面的时候将 Toast 隐藏掉,不知道还有没有更好的解决方案,等待解决......