ReactJS - 在componentWillMount中调用AJAX

时间:2016-09-07 07:20:15

标签: ajax reactjs

React documentation建议在componentDidMount函数中获取初始数据。对于我而言,这不直观,因为我们可以在componentWillMountReact component life cycle的第一个函数)中尽快完成。总的来说,我认为我们应该尽快启动AJAX,这样用户就不必等待它们了。那么为什么我们必须等到组件被渲染?

我的问题是:

  • componentWillMount中使用AJAX有什么问题吗?
  • componentDidMount中使用AJAX有什么好处吗?

3 个答案:

答案 0 :(得分:7)

说你在internal void FillDataGrid(User user, MainWindow mainWindow) { dt = new DataTable(); using (SqlConnection con = new SqlConnection(ConnectionString)) { con.Open(); using (SqlCommand cmd = new SqlCommand("SELECT * FROM " + Name, con)) { SqlDataAdapter sda = new SqlDataAdapter(cmd); sda.Fill(dt); mainWindow.dataGrid_Table.ItemsSource = dt.DefaultView; } } }

上做了AJAX
componentWillMount

现在您有一个挂起的AJAX请求。卸载组件时取消此请求是一种很好的做法

componentWillMount(){
   this.serverRequest = $.get(...);
}

但是,无论出于何种原因,我都可以说组件没有安装。您仍然有待处理的ajax请求,无法在任何地方取消(因为未安装组件,将无法访问componentWillUnmount: function() { this.serverRequest.abort(); } )因此会造成内存泄漏。

如果您已将{ajax请求放在componentWillUnmount上,那么您可以保证在安装组件后componentDidMount将会触发,以便您安全地清理您的请求

答案 1 :(得分:1)

只需在拥有数据时创建组件并通过props传递它。让父组件(如果有的话)来完成请求。

答案 2 :(得分:0)

这取决于你的任务。例如,我在componentWillReceiveProps here中使用了ajax请求。你究竟关心什么?你的ajax是什么?