有没有什么方法可以在marko js小部件中多次使用setState?

时间:2016-09-16 06:55:42

标签: javascript node.js marko

我在点击按钮时设置状态 即this.setState(' array',array);

在第一个setState上影响前端。但是,当我向数组推送更多值并尝试再次设置状态时,不会影响状态和前端。

有没有办法一遍又一遍地重新设置状态并再次渲染页面。

1 个答案:

答案 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

更多信息: