在组件安装之前如何获取数据?

时间:2020-06-02 01:33:23

标签: reactjs react-native react-redux

我的应用程序中有一个屏幕,正在加载一些数据。但是我认为组件在它们加载之前就已经安装好了。可能是因为尚未生成令牌。不使用超时怎么办才能做到这一点,也许是使用React Native的生命周期方法? ps:当我将文件保存为数据加载的两倍或三倍时,组件为空。

我的代码:

FPGrowth

1 个答案:

答案 0 :(得分:0)

您可以使用生命周期方法

componentWillMount

这是获取数据的最合逻辑的地方。在即将安装组件之前获取它,对吗?虽然有很多,但是...

尽管有两个问题。

1)首先,重要的是:从React 16.3(2018年3月)开始不推荐componentWillMount。

2)在componentWillMount内部具有fetch或axios的API调用在第一个渲染之前不会返回。这意味着该组件将使用空数据至少渲染一次。

由于JavaScript中异步事件的性质,当您启动API调用时,浏览器会同时恢复其他工作。当React渲染一个组件时,它不会等待componentWillMount完成它开始的一切– React继续前进并继续渲染。

无法“暂停”渲染以等待数据到达。您无法以某种方式从componentWillMount返回诺言或在setTimeout中争执。处理此问题的正确方法是设置组件的初始状态,以便即使在没有数据渲染时,它仍然看起来可以接受。

那你该怎么办?您可以呈现一个空列表或显示占位符,或者向新用户显示一些有关如何开始的提示。无论您做什么,都不要尝试遍历未定义的数组,否则会出现可怕的“无法读取未定义的属性'map'的错误”错误。