ref 包装任意类型(基本类型或对象),通过 .value 访问;reactive 只接受对象并返回深度响应式代理。社区主流建议是默认用 ref:语义统一、不受类型限制、解构和跨函数传递时不丢响应性,模板中自动解包。
reactive 的坑:只能用于对象、不能整体替换引用、解构后失去响应式(需 toRefs 补救);ref 包对象时内部仍调用 reactive。易错点:模板里顶层 ref 自动解包,但嵌套在普通对象里的 ref 不自动解包;watch 监听 ref 直接传 ref,监听 reactive 的某个属性必须传 getter 函数 () => obj.x。追问:shallowRef/shallowReactive 在大列表、第三方实例场景的性能意义、toRef 与 toRefs 的差异。
const count = ref(0)
const state = reactive({ user: null })
watch(() => state.user, onUserChange)