讲师中心 微信公众号
AI工具推荐 视频效率加速

Vue 计算属性的依赖项自动更新机制

云静吖_9106

云静吖_9106

发布时间:2026-06-22 08:43:00

|

704人浏览过

|

来源于php中文网

原创

Vue计算属性自动更新靠响应式系统精准建立“谁用了谁、谁变了通知谁”的映射关系,首次求值时标记活跃Watcher并静默收集所有被访问的响应式字段依赖,数据变更时标记dirty并延迟至微任务重算。

vue 计算属性的依赖项自动更新机制

Vue 计算属性的自动更新,靠的不是轮询或猜测,而是响应式系统在数据读取和写入时精准建立的“谁用了谁、谁变了通知谁”的映射关系。它不依赖你声明依赖列表,而是在 getter 执行过程中同步捕获所有被访问的响应式字段。

依赖怎么被悄悄记下来的?

计算属性首次求值时,Vue 会临时把当前计算任务标记为“活跃观察者”。此时只要读取一个响应式字段(比如 user.name 或 list[0].id),它的 getter 就会把当前这个计算任务存进自己的依赖池里。这个过程是递归且静默的:

  • 嵌套属性如 profile.address.city,只要 profile 是 reactive 的,就能被完整追踪
  • 数组索引访问(items[2].title)和方法调用中涉及的响应式读取(items.filter(x => x.active))也会被纳入依赖
  • 普通对象、Date.now()、Math.random()、localStorage 读取等非响应式值,不会留下任何依赖记录

数据变了,谁来动?怎么动?

当某个响应式字段被赋新值,它的 setter 会立刻遍历自己绑定的所有依赖(也就是之前收集到的那些 Watcher),并触发它们的更新流程。对计算属性来说,这并不等于马上重跑函数:

vue-component-analyzer
vue-component-analyzer

递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。

下载
  • 它只是把内部标记设为 dirty = true,表示“结果已过期”
  • 真正的重新计算被推迟到下一个微任务(nextTick),与其他更新批量处理,避免重复执行
  • 如果同一计算属性被模板、其他 computed 或 watch 多次引用,也只维护一个 Watcher,共享缓存与更新逻辑

为什么改了数据却没更新?常见断点在哪?

所谓“不更新”,往往是因为依赖根本没被收集上。典型情况包括:

立即学习“前端免费学习笔记(深入)”;

  • 在 Promise.then、setTimeout 或事件回调里才读取响应式数据——此时 getter 已结束,依赖收集早已关闭
  • 用 v-if 或提前 return 跳过了某字段的访问,那个字段就不会成为依赖
  • 直接操作未被 reactive 包裹的普通对象,或通过字符串 key 动态访问(如 obj[key])但 key 本身不是响应式
  • Vue 2 中对数组索引赋值(arr[0] = x)或修改 length,需用 Vue.set;Vue 3 的 Proxy 已支持大部分场景

复杂逻辑该怎么组织才稳?

一个计算属性里塞太多 if/else、多层嵌套或混合副作用,容易绕过依赖追踪,也难调试。更可靠的做法是分层拆解:

  • 把基础派生字段单独抽成计算属性,例如 filteredItems、hasError、isReady
  • 高层计算属性只组合这些中间结果,比如 displayText 基于 filteredItems.length 和 isReady
  • 若必须动态依赖(如根据 prop.key 读取不同字段)或需要副作用(发请求、改 DOM),改用 watchEffect 更合适

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2303

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

4963

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6050

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

5558

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

783

2024.05.22

vue2.0和3.0区别
vue2.0和3.0区别

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

1634

2023.07.17

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

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

11902

2024.02.23

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

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

296

2026.02.10

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

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

精品课程

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

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 17万人学习

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

共26课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn