我的应用程序中有一个屏幕,正在加载一些数据。但是我认为组件在它们加载之前就已经安装好了。可能是因为尚未生成令牌。不使用超时怎么办才能做到这一点,也许是使用React Native的生命周期方法? ps:当我将文件保存为数据加载的两倍或三倍时,组件为空。
我的代码:
FPGrowth
答案 0 :(得分:0)
您可以使用生命周期方法
componentWillMount
这是获取数据的最合逻辑的地方。在即将安装组件之前获取它,对吗?虽然有很多,但是...
尽管有两个问题。
1)首先,重要的是:从React 16.3(2018年3月)开始不推荐componentWillMount。
2)在componentWillMount内部具有fetch或axios的API调用在第一个渲染之前不会返回。这意味着该组件将使用空数据至少渲染一次。
由于JavaScript中异步事件的性质,当您启动API调用时,浏览器会同时恢复其他工作。当React渲染一个组件时,它不会等待componentWillMount完成它开始的一切– React继续前进并继续渲染。
无法“暂停”渲染以等待数据到达。您无法以某种方式从componentWillMount返回诺言或在setTimeout中争执。处理此问题的正确方法是设置组件的初始状态,以便即使在没有数据渲染时,它仍然看起来可以接受。
那你该怎么办?您可以呈现一个空列表或显示占位符,或者向新用户显示一些有关如何开始的提示。无论您做什么,都不要尝试遍历未定义的数组,否则会出现可怕的“无法读取未定义的属性'map'的错误”错误。