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

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

有什么方法可以一遍又一遍地设置状态并再次呈现页面。

最佳答案

Marko Widgets仅在新状态和旧状态之间进行浅表比较,以确定是否需要重新呈现UI组件。也就是说,Marko Widgets不会对数组进行深入比较以确定新数组是否具有新元素或其他元素。出于性能原因,进行了浅表比较,因为对于在UI组件状态中包含的每个属性进行深表比较通常在计算上过于昂贵。

解决方案1

推荐的策略是将添加到状态的对象视为不可变的。也就是说,您可以使用其他元素创建一个新数组,而不是变异旧数组:

坏:

var myArray = this.state.myArray;
myArray.push('foo');
this.setState('myArray', myArray); // No change since myArray === this.state.myArray


好:

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


更多信息:


Marko Widgets » JavaScript API » setStateDirty()
Marko Widgets » JavaScript API » setState()
Marko Blog » A Closer Look at Marko Widgets » How is component state managed?

10-08 08:16