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
更多信息: