ref 和 reactive 是 vue 3 响应式通信的底层基础而非直接通信机制,它们为 props、emit、v-model、provide/inject 等提供响应性支持;ref 用于单值追踪,reactive 用于对象/数组的深层响应;二者在父子通信、双向绑定、跨层级注入中协同工作,但需注意替换对象、解构丢失响应性及 .value 访问等关键细节。

Vue 3 的响应式 API(ref 和 reactive)本身不直接负责组件通信,但它们是实现通信的底层基础。真正完成父子、兄弟或跨层级通信的,是 props、emit、v-model、provide/inject、mitt 或 pinia 等机制——而这些机制背后依赖的,正是 ref 和 reactive 提供的响应式能力。
ref 和 reactive 是“数据管道”,不是“通信协议”
你可以把 ref 和 reactive 理解成给数据装上“监听器”的工具:
- ref 让单个值(如字符串、数字、布尔)可被 Vue 追踪变化;
- reactive 让整个对象或数组的所有属性自动具备响应性。
没有它们,父组件传给子组件的 props 就只是静态快照,子组件内部修改不会触发更新;emit 出去的新值也无法被父组件的 ref 变量实时捕获;v-model 绑定的 input 值更不会自动同步到 data 中。
在常见通信场景中,它们怎么配合工作?
父子通信(props + emit)
- 父组件用
ref或reactive定义状态,再通过 props 传给子组件; - 子组件接收 props(只读),但若需修改并通知父组件,就调用
emit('update:xxx', newValue); - 父组件监听该事件,并用
.value = newValue(ref)或直接赋值(reactive 对象属性)更新本地响应式数据。
v-model 双向绑定
-
v-model="title"实际是:model-value="title" @update:model-value="title = $event"的语法糖; - 只要
title是ref('')或reactive({ title: '' })中的响应式字段,就能实时同步。
provide / inject
vue-composition-api-best-practices
Vue 3 组合式 API 与
热门下载
相关下载
精品课程
相关推荐
/
热门推荐
/
最新课程
最新文章
