React v0.12发布公告包括以下内容:
新功能:
* React.addons.batchedUpdates added to API for hooking into update cycle
但是我找不到此API的任何文档。它的目的是什么?
具体而言,它是否有可能等同于Ember.run()
?
答案 0 :(得分:7)
在响应onClick
之类的合成事件时,组件状态更改会被批处理,因此对同一组件的this.setState
的大量调用只会导致一次渲染。
如果要更改状态以响应其他异步回调(例如AJAX或setTimeout),则每次调用this.setState
都将导致渲染。您可以将工作包装在batchedUpdates(..)
中以避免这种情况。
var React = require('react/addons');
var batchedUpdates = React.addons.batchedUpdates;
var request = require('superagent'); // AJAX lib
var req = request('GET', ...).end(function(err, res) {
// invoked when AJAX call is done
batchedUpdates(function(){
.. all setState calls are batched and only one render is done ...
})
});
答案 1 :(得分:0)
默认的批量更新策略非常适合普通网站。有时你有额外的要求,需要偏离它。
这个公开的最初原因是requestAnimationFrame批处理策略,这对于需要经常在许多地方更新的游戏和网站更好。
它只是解决边缘案例问题的可扩展性点。