2016-09-16 90 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 

更多信息:

相关问题