gpt4 book ai didi

vue.js - vue props : Should I pass the object or its properties? 区别大不大?

转载 作者:搜寻专家 更新时间:2023-10-30 22:42:57 25 4
gpt4 key购买 nike

假设我的应用程序是一个用 Vue 构建的精简电子表格。关键组件是 TableCollectionTableRowFieldTableCollection 有一个包含多个 Table 对象的数组。每个 Table 都有一个包含多个 Row 对象的数组。每个 Row 都有一个包含多个 Field 对象的数组。

在表格模板中使用行组件时,我可以绑定(bind)单个行属性 (:row="row"),或者我可以为每一列绑定(bind)一个单独的属性 (: col1="col1":col2="col2":col3="col3")。哪种方法是首选,为什么?

传递单个属性不那么冗长,但从行组件中引用它更冗长,因此它们(大致)相互抵消了。单个属性的一个优点是我可以通过推送到数组来动态添加一个字段。

还有其他因素需要考虑吗?比如对Vue生成的getters和setters有影响吗?

最佳答案

在重新阅读文档并进行一些测试后,我发现将 props 作为对象传递与对象属性传递之间存在重要区别。

此页面明确表明两者都可以,https://v2.vuejs.org/v2/guide/components-props.html#Passing-an-Object

但是,如果您传递对象,那么您在组件中所做的任何更改也将反射(reflect)在父级中。根据本节底部的评论,这是有道理的,https://v2.vuejs.org/v2/guide/components-props.html#One-Way-Data-Flow

内容如下:

Note that objects and arrays in JavaScript are passed by reference, so if the prop is an array or object, mutating the object or array itself inside the child component will affect parent state.

为了证明这一点,您将以下代码放在 html 页面中:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue Test</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app"></div>

<script>

Vue.component('propTest', {
props : ['scalar', 'object', 'other'],
template: `<div>Scalar is <input type="text" v-model="scalar"><br>
Object field 1 is <input type="text" v-model="object.field1"><br>
Object field 2 is <input type="text" v-model="other"></div>`
});

var app = new Vue({
el: '#app',
data: {
scalarVal : 'SCALAR',
objectVal : {
field1 : 'FIELD ONE',
field2 : 'FIELD TWO'
}
},
template : '<div><prop-test :scalar="scalarVal" :object="objectVal" :other="objectVal.field2"></prop-test></div>'
})

</script>
</body>
</html>

如您所见,它向子对象传递了三个属性:一个标量值、一个对象和一个作为标量值的对象属性。它们在每个 v 模型的 child 中都有双向绑定(bind)。

更新网页上的三个值,然后检查您的 Vue 开发工具以查看:

  • 标量在子节点中更新,但在根节点中不更新
  • 当一个对象被传递,一个字段被更新时,它反射(reflect)在 child 和根中
  • 当对象字段作为其自己的独立属性传递时,更新显示在子节点而不是根

关于vue.js - vue props : Should I pass the object or its properties? 区别大不大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49748813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com