1. props
父组件使用 props 传递数据给子组件:

{{ msg }}

// parent.vuedata() {return {message: 'Hello!'}}

子组件使用 props 接收:

// child.vue props: ['msg']

2. emit 自定义事件
子组件触发事件,父组件监听该事件并更新数据:

 

{{ msg }}

// parent.vuemethods: {updateMessage(newMsg) {this.message = newMsg}}
// child.vuemethods: {emitUpdate() { this.$emit('update', 'Updated message!')}}

3. refs
通过 ref 给子组件绑定引用,然后通过该引用直接更新子组件的数据或调用子组件的方法:

// parent.vue methods: {updateChildMessage() {this.$refs.child.msg = 'New message'}}

在 child 组件中:

export default {data() {return {msg: 'Initial message'}}}

4. provide / inject
父组件提供数据,子组件注入并使用:

// parent.vueprovide: {name: 'Parent'}

子组件:

// child.vueinject: ['name']console.log(name) // Prints "Parent"

最后总结一下:Vue 3 中组件传值主要的方式有:

1. props – 父传子
2. emit – 子传父
3. refs – 父访问子
4. provide/inject – 祖先传后代

这些方式可以组合使用,实现非常灵活的组件通信。