Watch 深度与即时怎么在 watch 中同时配置 deep: true 与 immediate: true

千磊小哥_1776

千磊小哥_1776

2026-08-31

899人浏览

原创

同时配置 deep: true 和 immediate: true 是解决“初始化执行+深层响应”需求的标准做法:前者递归监听嵌套属性,后者使回调在组件创建时立即执行一次,二者结合实现逻辑闭环。

watch 深度与即时怎么在 watch 中同时配置 deep: true 与 immediate: true

可以同时配置 deep: true 和 immediate: true,这是解决“初始化就要执行 + 内部任意变化都要响应”这类需求的标准做法。

Vue 2 选项式 API 写法

在组件的 watch 选项中,以对象形式声明监听器,并把两个配置都写进去:

  • 监听目标是响应式数据(如 data 中定义的 userInfo)
  • handler 是回调函数,接收新值和旧值
  • deep: true 启用递归监听嵌套属性
  • immediate: true 让 handler 在组件创建时立刻执行一次

示例:

watch: {
  userInfo: {
    handler(newVal, oldVal) {
      console.log('userInfo 变了(含内部字段)', newVal)
      // 注意:首次执行时 oldVal 是 undefined
      if (oldVal === undefined) {
        console.log('这是初始化触发')
      }
    },
    deep: true,
    immediate: true
  }
}

Vue 3 组合式 API 写法

使用 watch() 函数,第三个参数传入配置对象:

Vuejs
Vuejs

Vue.js 官方推荐通过 npm 进行安装,这是构建现代化前端项目最主流的方式。在终端中执行 npm install vue 即可获取最新稳定版,如需指定版本可添加 @版本号,例如 npm install vue@3.4.0。安装前请确保已配置 Node.js 环境(推荐 v18 及以上版本),并建议将 npm 镜像源切换至国内镜像以提升下载速度。对于大型项目,还可通过 npm create v

下载
  • 第一个参数是监听源,必须是 getter 函数(如 () => userInfo),不能直接写 userInfo
  • 第二个参数是回调函数
  • 第三个参数为配置对象:{ deep: true, immediate: true }

示例:

import { watch, reactive } from 'vue'

const userInfo = reactive({
  name: '张三',
  profile: { avatar: '/avatar.png' }
})

watch(
  () => userInfo,
  (newVal, oldVal) => {
    console.log('userInfo 深度变化或初始化', newVal)
    // 首次调用时 oldVal 为 undefined
  },
  { deep: true, immediate: true }
)

为什么必须组合用?单独用会怎样?

只设 immediate: true:初始化能执行,但改 userInfo.profile.avatar 这类深层字段时不会触发。

只设 deep: true:深层字段修改能捕获,但组件一上来不会自动执行,得等第一次变化才动。

两者一起:初始化执行一次(oldVal 为 undefined),之后每次任何嵌套属性变化都再触发 —— 逻辑闭环,不用额外在 created 或 onMounted 里重复写初始化逻辑。

注意事项

  • 回调中务必判断 oldVal === undefined,避免对未定义值做操作(比如 oldVal.length 报错)
  • 性能敏感场景慎用 deep: true,尤其监听大对象或频繁更新的对象;优先考虑监听具体路径(如 () => user.profile.name)
  • 监听非响应式对象(如通过 Object.assign 替换整个对象)时,deep 无效,需确保源头是 reactive 或 ref

相关专题

更多
vue2.0和3.0区别
vue2.0和3.0区别

vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.17

1614

5

vue3的生命周期有哪些
vue3的生命周期有哪些

vue3的生命周期:1、beforecreate;2、created;3、beforemount;4、mounted;5、beforeupdate;6、updated;7、beforedestroy;8、destroyed;9、activated;10、deactivated等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

11762

5

Vue3组合式API与组件开发实战
Vue3组合式API与组件开发实战

本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

2026.02.10

276

23

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

0

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

0

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

200

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

120

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

100

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

60

12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 16.8万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.7万人学习