React documentation建议在componentDidMount
函数中获取初始数据。对于我而言,这不直观,因为我们可以在componentWillMount
(React component life cycle的第一个函数)中尽快完成。总的来说,我认为我们应该尽快启动AJAX,这样用户就不必等待它们了。那么为什么我们必须等到组件被渲染?
我的问题是:
componentWillMount
中使用AJAX有什么问题吗?componentDidMount
中使用AJAX有什么好处吗?答案 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;
}
}
}
componentWillMount
现在您有一个挂起的AJAX请求。卸载组件时取消此请求是一种很好的做法
componentWillMount(){
this.serverRequest = $.get(...);
}
但是,无论出于何种原因,我都可以说组件没有安装。您仍然有待处理的ajax请求,无法在任何地方取消(因为未安装组件,将无法访问componentWillUnmount: function() {
this.serverRequest.abort();
}
)因此会造成内存泄漏。
如果您已将{ajax请求放在componentWillUnmount
上,那么您可以保证在安装组件后componentDidMount
将会触发,以便您安全地清理您的请求
答案 1 :(得分:1)
只需在拥有数据时创建组件并通过props传递它。让父组件(如果有的话)来完成请求。
答案 2 :(得分:0)
这取决于你的任务。例如,我在componentWillReceiveProps here中使用了ajax请求。你究竟关心什么?你的ajax是什么?