的React v0.12發佈公告包括以下內容:React.addons.batchedUpdates API的目的是什麼?
新功能:
* React.addons.batchedUpdates added to API for hooking into update cycle
但是我無法找到這個API的任何文件。它的目的是什麼?
具體來說,它有相當於Ember.run()
的任何機會?
的React v0.12發佈公告包括以下內容:React.addons.batchedUpdates API的目的是什麼?
新功能:
* React.addons.batchedUpdates added to API for hooking into update cycle
但是我無法找到這個API的任何文件。它的目的是什麼?
具體來說,它有相當於Ember.run()
的任何機會?
默認批量更新策略對您的普通網站非常有用。有時你有額外的要求,需要偏離這一點。
這個被公開的最初原因是針對一個requestAnimationFrame批處理策略,這對於需要在很多地方經常更新的遊戲和網站來說更好。
這只是一個可擴展性點來解決邊緣案例問題。
當響應像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 ...
})
});
謝謝你。我正在接受來自Mousetrap.js的鍵盤事件,並想知道爲什麼狀態更改批處理不起作用。這回答了我的問題並提供瞭解決方案。 – Raman
它是否包含相當於Ember.run()?即。在React的正常事件循環之外批量更新的方法? –
React有一個批量更新的默認方式,即iirc使用setTimeout。這使您可以指定替代方案,或從中獲取數據,分析等。在不瞭解更多關於Ember.run的情況下,我猜想它是相似的。 – FakeRainBrigand