当我们尝试直接更改prop值时,Vue.js会显示警告,如下所示:
Vue.component('Games', {
template: `
<div>
<ol>
<li v-for="game in games">{{ game }}</li>
</ol>
<button @click="clear">Clear games</button>
</div>
`,
props: ['games'],
methods: {
clear: function () {
this.games = [];
}
}
});
显示的警告是:
避免直接更改prop,因为每当父组件重新渲染时,该值都会被覆盖。而是使用基于属性值的数据或计算属性。
我知道为什么会发生这种情况,但是令我惊讶的是,这种情况并未发生.push()
。如果我更改了向数组添加值而不是重写值的方法,则不会发出警告:
methods: {
add: function () {
this.games.push('Whatever');
}
}
为什么没有警告?如何直接推动道具罚款而不是重写?
只是因为Array
是一种参考内存。当您拥有Array
或Object
存储在任何变量中时,它就是参考变量。
Memory management
在这种情况下,引用变量将指向其中的内存地址,heap
因此您可以在地址中添加更多n个值。但是,您不能仅用任何新值替换该地址,即使使用新地址也是如此。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句