Binding vue.js道具数组/对象与文字

Binding vue.js道具数组/对象与文字,binding,vue.js,Binding,Vue.js,顺便说一下,vue.js中的道具在文档中是单向绑定的: 请注意,JavaScript中的对象和数组是通过引用传递的,因此,如果道具是数组或对象,则在子对象中更改对象或数组本身将影响父状态 所以我想知道,prop.sync是仅用于“literal”(即字符串、数字、日期)还是也必须用于对象/数组 我已经使用了没有同步的对象,而且所有的工作都很好,但我担心这不是做“vue.js”的好方法 所以我的问题是:我可以在道具中使用对象/数组吗,没有同步,没有问题?是的,您可以使用对象和数组作为道具值。然而

顺便说一下,vue.js中的道具在文档中是单向绑定的:

请注意,JavaScript中的对象和数组是通过引用传递的,因此,如果道具是数组或对象,则在子对象中更改对象或数组本身将影响父状态

所以我想知道,prop.sync是仅用于“literal”(即字符串、数字、日期)还是也必须用于对象/数组

我已经使用了没有同步的对象,而且所有的工作都很好,但我担心这不是做“vue.js”的好方法


所以我的问题是:我可以在道具中使用对象/数组吗,没有同步,没有问题?

是的,您可以使用对象和数组作为道具值。然而,一个区别是,当为object或array类型的道具提供默认值时,必须定义一个factory函数来返回默认值

主要的区别是,
sync
修饰符是扩展到v-on侦听器的语法糖。当值更改时,子组件将事件发回父组件,从而允许父组件相应地更新

子组件必须显式发出事件

// example from docs
this.$emit('update:foo', newValue)

是的,您可以使用对象和数组作为属性值。然而,一个区别是,当为object或array类型的道具提供默认值时,必须定义一个factory函数来返回默认值

主要的区别是,
sync
修饰符是扩展到v-on侦听器的语法糖。当值更改时,子组件将事件发回父组件,从而允许父组件相应地更新

子组件必须显式发出事件

// example from docs
this.$emit('update:foo', newValue)

在某些情况下,我们可能需要道具的“双向绑定”。不幸的是,真正的双向绑定可能会产生维护问题,因为子组件可以变异父组件,而父组件和子组件中的变异源都不明显。 这就是为什么我们建议以update:myPropName模式发送事件。例如,在带有标题道具的假设组件中,我们可以将分配新值的意图传达给:

this.$emit('update:title', newTitle)

如果直接在子组件中修改道具,则会出现错误。所以从这个意义上说,不,这是不安全的。原因是父级将覆盖子级设置的任何内容。

在某些情况下,我们可能需要对道具进行“双向绑定”。不幸的是,真正的双向绑定可能会产生维护问题,因为子组件可以变异父组件,而父组件和子组件中的变异源都不明显。 这就是为什么我们建议以update:myPropName模式发送事件。例如,在带有标题道具的假设组件中,我们可以将分配新值的意图传达给:

this.$emit('update:title', newTitle)

如果直接在子组件中修改道具,则会出现错误。所以从这个意义上说,不,这是不安全的。原因是父级将覆盖子级设置的任何内容。

我的问题更多的是关于“使用对象进行双向绑定是否安全?是否完全不同步?”如果您直接在子组件中更改道具,则会出错。所以从这个意义上说,不,这是不安全的。原因是父级将覆盖子级设置的任何内容。sync修饰符就是用来解决这个问题的。我的问题更多的是关于“使用对象进行双向绑定是否安全?是否完全不同步?”如果您直接在子组件中修改道具,则会出现错误。所以从这个意义上说,不,这是不安全的。原因是父级将覆盖子级设置的任何内容。同步修改器就是用来解决这个问题的。