2016-09-16 81 views

回答

1

Marko Widgets只對新狀態和舊狀態進行淺層比較以確定UI組件是否需要重新渲染。也就是說,Marko Widgets將而不是做了深入的數組比較,以確定新數組是否具有新元素或不同元素。出於性能原因而進行淺層比較,因爲對UI組件狀態的每個屬性進行深度比較往往會計算過於昂貴。

溶液1

建議的策略是治療對象添加到狀態爲不可變的。也就是說,而非突變的舊數組,你會,而是創建一個額外的元素的新數組:

BAD:

var myArray = this.state.myArray; 
myArray.push('foo'); 
this.setState('myArray', myArray); // No change since myArray === this.state.myArray 

GOOD:

var myArray = this.state.myArray; 
myArray = myArray.concat('foo'); // myArray !== this.state.myArray 
this.setState('myArray', myArray); 

解決方案2

另一種選擇是在突變陣列後調用this.setStateDirty('myArray')

var myArray = this.state.myArray; 
myArray.push('foo'); 
this.setStateDirty('myArray'); // Mark the object as being modified 

更多信息:

相關問題