Vue响应式系统通过渲染函数执行时自动收集依赖、数据变更时精准通知重渲染实现静默联动,不依赖轮询或手动调用;首次挂载读取数据触发getter收集依赖,setter触发后批量异步更新。
Vue.js 响应式系统在组件渲染中不是“主动触发”,而是通过数据读取与变更的自然联动,在特定环节自动介入——关键在于渲染函数执行时收集依赖,响应式数据被修改时通知重渲染。它不依赖定时轮询或手动调用,而是一套静默、精准、按需激活的机制。
组件首次渲染时,Vue 调用 render 函数生成 VNode。这个过程会读取所有用到的响应式数据(如 ref.value、reactive.obj.name),每次读取都触发 getter,此时:
state.user.profile.avatar)会逐层触发 get,实现深度依赖记录;{{ count }},底层等价于 render 函数里访问 count.value,同样完成依赖收集。当响应式数据被修改(如 count.value++ 或 state.msg = 'new'),setter 或 Proxy 的 set 拦截器被触发,随即启动更新流程:
'msg')查到对应 Dep;子组件是否重渲染,取决于它是否实际使用了变化的 props:
立即学习“前端免费学习笔记(深入)”;
{{ title }}),该 prop 的变更会触发子组件依赖收集链路,进而重跑 render;有些操作本身不改数据,但会打破响应式链路或强制刷新:
this.$forceUpdate():跳过依赖追踪,直接标记组件为“需更新”,适用于新增未劫持属性后补救;triggerRef():针对 shallowRef 主动唤醒依赖,常用于内部状态需要手动通知的场景;