您的主要组件使用中的空数组初始化状态
data。渲染将始终失败,因为没有
this.state.data[0]。
可能有人会回答ajax请求将提供此state属性的值
data(假设您的Web服务正在提供有效的数组)。 但是
,这仅在从服务器接收到响应之后发生,而在第一次渲染后不会发生。
如果信息立即可用,则可以使用
setState方法
componentWillMount或组件构造函数,以免触发第二次渲染:
在挂载发生之前立即调用componentWillMount()。在render()之前调用它,因此在此方法中同步设置状态不会触发重新渲染。避免在此方法中引入任何副作用或订阅。
在这种情况下,由于我们正在等待远程信息,因此React文档仍然建议使用
componentDidMount,以及在此处使用的方法:
挂载组件后立即调用componentDidMount()。需要DOM节点的初始化应该在这里进行。如果需要从远程端点加载数据,这是实例化网络请求的好地方。在此方法中设置状态将触发重新渲染。
因此,组件的render方法必须能够处理丢失的状态变量。有多种方法可以解决此问题,但是
data最简单的方法是阻止嵌套元素被渲染直到我们拥有为止。使用某些附加逻辑,应用程序可以通知用户特定组件正在加载。
render() { return ( <div className="row"> <div className="col-md-6"> <CategoryList categories={this.state.data} /> </div> <div className="col-md-6"> {this.state.data.length > 0 && <ItemsList category={this.state.data[0]} /> } </div> </div> );}


