0
我在點擊按鈕上設置狀態。
即this.setState('array',array);有沒有什麼辦法可以在marko js widget中設置多個狀態?
第一次setState它影響到前端。但是當我向數組推送更多值並嘗試再次設置狀態以不影響狀態和前端時。
是否有任何方法來一遍又一遍地設置狀態並再次渲染頁面。
我在點擊按鈕上設置狀態。
即this.setState('array',array);有沒有什麼辦法可以在marko js widget中設置多個狀態?
第一次setState它影響到前端。但是當我向數組推送更多值並嘗試再次設置狀態以不影響狀態和前端時。
是否有任何方法來一遍又一遍地設置狀態並再次渲染頁面。
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
更多信息: