我在点击按钮时设置状态 即this.setState(' array',array);
在第一个setState上影响前端。但是,当我向数组推送更多值并尝试再次设置状态时,不会影响状态和前端。
有没有办法一遍又一遍地重新设置状态并再次渲染页面。
答案 0 :(得分:2)
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
更多信息: