effect 在创建时立即执行一次以完成依赖收集,后续仅在所读响应式数据变更且已被收集依赖时,由 scheduler 决定同步或异步执行;组件中 watchEffect 首次执行于挂载前,后续触发不受挂载状态影响。
Vue.js 响应式系统中,副作用函数(effect)的触发时机不是“一改就立刻执行”,而是由依赖收集、数据变更和调度器三者共同决定的。核心在于:effect 只在它所读取的响应式数据发生变更时被通知,并按调度策略执行——默认同步,但可异步批量处理。
调用 effect(fn) 时,Vue 会立即执行传入的函数(即 run()),完成首次求值并触发依赖收集。这是初始化行为,不依赖后续变化。
当 effect 内部读取过的响应式属性被修改(如 state.count = 5),set 拦截器会调用 trigger,查找该属性对应的依赖池,从中取出所有 effect 并安排执行。
默认情况下,没有配置 scheduler 的 effect 会被 同步执行;但 Vue 内部组件更新等场景都使用了自定义 scheduler,实现异步批量更新。
立即学习“前端免费学习笔记(深入)”;
在 setup 中使用的 watchEffect 或 computed,其触发时机还受组件挂载状态影响:
virtualbox下怎么实现ubuntu20.04开机自动挂载共享文件夹?
ubuntu20.04怎么开启护眼模式? ubuntu夜间模式的设置方法
如何在Ubuntu 20.04上安装Microsoft Edge浏览器
Ubuntu20.10优麒麟触摸手势有哪些? 优麒麟系统新增手势汇总
优麒麟20.04.1发布 更新内容汇总(附下载)
Mermaid Visual Editor 如何同步可视化操作与 Mermaid 源码?