2014-11-16 21 views

回答

0

默認批量更新策略對您的普通網站非常有用。有時你有額外的要求,需要偏離這一點。

這個被公開的最初原因是針對一個requestAnimationFrame批處理策略,這對於需要在很多地方經常更新的遊戲和網站來說更好。

這只是一個可擴展性點來解決邊緣案例問題。

+0

它是否包含相當於Ember.run()?即。在React的正常事件循環之外批量更新的方法? –

+0

React有一個批量更新的默認方式,即iirc使用setTimeout。這使您可以指定替代方案,或從中獲取數據,分析等。在不瞭解更多關於Ember.run的情況下,我猜想它是相似的。 – FakeRainBrigand

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 ... 
    }) 
}); 
+0

謝謝你。我正在接受來自Mousetrap.js的鍵盤事件,並想知道爲什麼狀態更改批處理不起作用。這回答了我的問題並提供瞭解決方案。 – Raman