Vue.js 响应式系统中的 Watch 侦听器如何监听嵌套对象

风枫姑娘_2441

风枫姑娘_2441

2026-07-18

700人浏览

原创

vue watch 默认不监听嵌套属性变化,需监听顶层对象并配置 deep: true;初始化需定义完整结构,避免动态添加非响应式字段;推荐用 watcheffect 自动追踪依赖。

vue.js 响应式系统中的 watch 侦听器如何监听嵌套对象

Vue 的 watch 默认不监听嵌套对象内部属性的变化,只检测对象引用是否改变。比如 obj.user.name = '张三' 不会触发监听,除非你明确告诉 Vue:要深入追踪每一层。

必须监听顶层响应式对象,并启用 deep: true

不能写成 watch(() => obj.user.name, ...) 或字符串形式 'obj.user.name' 并加 deep: true —— 这种写法无效,因为中间路径(如 obj.user)可能不是响应式代理对象。

  • ✅ 正确做法:监听整个 obj,并显式配置 { deep: true }
  • 组合式 API 示例:watch(() => obj, (n, o) => { /* 处理任意层级变化 */ }, { deep: true })
  • 选项式 API 示例:watch: { obj: { handler() { /* ... */ }, deep: true } }

初始化结构要完整,避免中途新增非响应式字段

Vue 的响应式系统无法自动追踪动态添加的属性(如 obj.newField = {}),除非该字段从一开始就存在于 reactive 或 ref 初始化中。

vue-composition-api-best-practices
vue-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 17.2万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.5万人学习