我使用reactJS 16.5.2和Im对下一个主要版本(17)感到困惑,在该版本中,将不赞成使用组件LiceCycle的一些经典方法(componentWillReceiveProps,componentWillUpdate和componentWillMount)。
此帖子之后:https://medium.com/@baphemot/understanding-reactjs-component-life-cycle-823a640b3e8d
我正在准备,但我找不到在组件中进行AjaxCall填充组件本身数据的正确位置。
我通常制作一个包装器组件,用于管理与外部服务器的异步通信。
Component通常在componentWillMount中调用该方法,其中setState为Legit。
componentWillMount()
{
this.props.someAjaxCall(); //calling the Wrapped method that will call a setDate( { ajaxData : response.data } );
}
renderData()
{
if (this.props.ajaxData === undefined) //ajax call is not ended yet
{
return <span> No data </span>
}
return <span> Lot of Data </span> //ajax call has completed
}
render()
{
return this.renderData();
}
使用此流程,组件将被渲染两次。第一次没有填写ajaxData,因此将呈现“无数据”。 在AjaxCall的结尾,包装器将创建一个setState,以便调用新的渲染器。
通过这种流程,我通常使用shouldComponentUpdate来避免不必要地呈现任何包装组件。
问题是。随着componentWillMount的弃用,我必须在哪里调用Ajax异步方法?
答案 0 :(得分:0)
您应该使用componentDidMount
进行AJAX调用。即使使用componentWillMount
,也要使用componentDidMount
进行API调用。请阅读this