为什么Vue.js允许推送到prop数组?

盗窃罗伯克

当我们尝试直接更改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是一种参考内存。当您拥有ArrayObject存储在任何变量中时,它就是参考变量。

Memory management在这种情况下,引用变量将指向其中的内存地址,heap因此您可以在地址中添加更多n个值。但是,您不能仅用任何新值替换该地址,即使使用新地址也是如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章