【发布时间】:2015-04-30 16:36:45
【问题描述】:
我一直在编写这样的 ReactJS AJAX 请求:
this.setState({
isLoading: true,
results: null
});
$.get(ajaxUrl, function(results) {
this.setState({
isLoading: false,
results: results
});
}.bind(this));
这只是一个例子,它缺乏错误处理、限制、取消请求等。但要点就在那里。我基本上要求设置一些状态,然后然后发出请求。
查看 GitHub 上的一些其他代码,但我注意到有些人在 setState 回调中编写 AJAX 调用:
this.setState({
isLoading: true,
results: null
}, function() {
$.get(ajaxUrl, function(results) {
this.setState({
isLoading: false,
results: results
});
}.bind(this));
}.bind(this));
这样做有正当理由吗? The docs say:
不保证 setState 调用的同步操作,调用可能会被批处理以提高性能。
因此不能保证 setState 在返回之前会改变状态,但我没有看到不同的 setState 可能会乱序执行。所以可能发生的最坏情况是“加载”状态永远不会被渲染。这是后一种风格试图解决的问题吗?还有其他一些我没有看到的风险吗?
【问题讨论】:
标签: ajax concurrency reactjs