Vue 3 的 reactive 数组为什么能感知 arr[0] 赋值、push 和 length 修改,而 Vue 2 需要特殊补丁?
Vue 3 的 reactive 数组为什么能感知 arr[0] 赋值、push 和 length 修改,而 Vue 2 需要特殊补丁? 本文先给出可直接复述的结论,再用最小代码说明Vue 3 数组索引 push length 响应式原理的工作方式、判断依据、项目边界和常见误区。
Vue · 响应式原理面试题第 1 页,显示第 1–46 题,共找到 46 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
Vue 3 的 reactive 数组为什么能感知 arr[0] 赋值、push 和 length 修改,而 Vue 2 需要特殊补丁? 本文先给出可直接复述的结论,再用最小代码说明Vue 3 数组索引 push length 响应式原理的工作方式、判断依据、项目边界和常见误区。
把纯静态路由表、常量字典或巨型不可变 JSON 全量 reactive 化,在 Vue 中主要浪费什么,应该怎么降级? 本文先给出可直接复述的结论,再用最小代码说明Vue 静态配置过度响应式 性能浪费 降级的工作方式、判断依据、项目边界和常见误区。
在 Vue 的响应式 effect 中,await 之后再读取响应式状态为什么可能不会按直觉建立依赖? 本文先给出可直接复述的结论,再用最小代码说明Vue effect 中 await 后依赖追踪失效的工作方式、判断依据、项目边界和常见误区。
同一个 Vue effect 依赖的多个 ref 在一次同步代码块里连续修改,为什么通常只引起一次重新运行而不是每行一次? 本文先给出可直接复述的结论,再用最小代码说明Vue 多次同步修改 批量调度 合并更新的工作方式、判断依据、项目边界和常见误区。
把带 #private 字段或依赖内部槽位的 class 实例放进 Vue reactive,为什么可能比放普通对象更容易坏? 本文先给出可直接复述的结论,再用最小代码说明Vue reactive class 私有字段失效原因的工作方式、判断依据、项目边界和常见误区。
在 Vue 的 computed 里直接 await 接口返回为什么常得到 Promise 或旧值,正确边界是什么? 本文先给出可直接复述的结论,再用最小代码说明Vue computed 里 await 的陷阱与边界的工作方式、判断依据、项目边界和常见误区。
多个 Vue computed 串联 a→b→c 时,源 ref 变化后重算顺序为什么不能依赖“立即全部同步执行”? 本文先给出可直接复述的结论,再用最小代码说明Vue computed 链式依赖 重算顺序的工作方式、判断依据、项目边界和常见误区。
说明 computed 依据实际读取的响应式依赖缓存结果,区分依赖变化、下一次读取、动态分支与下游更新,解释 Date.now、普通变量和原地绕过代理修改的边界。
Vue 的 computed 和模板里调用方法都能派生值,什么输入下 computed 的缓存才是决定性优势? 本文先给出可直接复述的结论,再用最小代码说明Vue computed 和 methods 缓存区别的工作方式、判断依据、项目边界和常见误区。
Vue computed/effect 在 if 分支里才读取某个响应式字段,分支切换后依赖集合会怎样变化? 本文先给出可直接复述的结论,再用最小代码说明Vue 条件分支 依赖收集动态变化的工作方式、判断依据、项目边界和常见误区。
用 customRef 做带格式校验的输入状态时,track 与 trigger 应该放在 get/set 的哪一侧,为什么? 本文先给出可直接复述的结论,再用最小代码说明Vue customRef track trigger 放置位置的工作方式、判断依据、项目边界和常见误区。
删除 Vue reactive 对象的键 delete state.foo 会触发哪些依赖,和把 foo 设为 undefined 语义相同吗? 本文先给出可直接复述的结论,再用最小代码说明Vue reactive delete 属性 与 undefined 区别的工作方式、判断依据、项目边界和常见误区。
为什么直接 const { count } = reactive({ count: 0 }) 后再改 count 不会触发 Vue 视图更新? 本文先给出可直接复述的结论,再用最小代码说明Vue reactive 解构丢失响应式 原因的工作方式、判断依据、项目边界和常见误区。
如果手写最小 Vue 响应式,activeEffect、targetMap、dep 三个结构分别解决什么问题? 本文先给出可直接复述的结论,再用最小代码说明手写 Vue 响应式 activeEffect targetMap dep的工作方式、判断依据、项目边界和常见误区。
多个 Vue 组合式函数共享同一个 effectScope 时,dispose 一次会怎样影响其中 computed 与 effect? 本文先给出可直接复述的结论,再用最小代码说明Vue effectScope dispose 影响范围的工作方式、判断依据、项目边界和常见误区。
Vue 触发更新前如何判断值真的变了,NaN 与 +0/-0 这类边界为什么需要 hasChanged 语义? 本文先给出可直接复述的结论,再用最小代码说明Vue hasChanged Object.is NaN 变更判断的工作方式、判断依据、项目边界和常见误区。
对 Vue 的 reactive 对象执行 JSON.stringify 得到的是实时视图还是快照,为什么不能用它替代状态同步? 本文先给出可直接复述的结论,再用最小代码说明Vue reactive JSON.stringify 是快照的工作方式、判断依据、项目边界和常见误区。
Vue 3 中给已创建的 reactive 对象 later 添加新键为什么会触发更新,而同类代码在 Vue 2 常要 $set? 本文先给出可直接复述的结论,再用最小代码说明Vue 3 新增属性自动响应式 无需 $set的工作方式、判断依据、项目边界和常见误区。
Vue 3 的 reactive 包 Map/Set 时,读取 size、遍历和增删元素分别会建立或触发哪些依赖? 本文先给出可直接复述的结论,再用最小代码说明Vue reactive 包裹 Map Set 依赖追踪的工作方式、判断依据、项目边界和常见误区。
什么时候应把第三方实例、DOM 节点或不可变配置放进 Vue 的 markRaw,而不是 reactive? 本文先给出可直接复述的结论,再用最小代码说明Vue markRaw 第三方实例 使用时机的工作方式、判断依据、项目边界和常见误区。
Vue 组合式函数要同时接受 3、ref(3)、() => 3 时,unref/toValue 的归一化边界怎么设计? 本文先给出可直接复述的结论,再用最小代码说明Vue unref toValue MaybeRef 归一化设计的工作方式、判断依据、项目边界和常见误区。
为什么在 Vue 的渲染或 effect 追踪期间同步修改刚读取的响应式状态容易形成循环触发? 本文先给出可直接复述的结论,再用最小代码说明Vue effect 追踪期间改状态 循环触发的工作方式、判断依据、项目边界和常见误区。
访问 Vue reactive 的深层对象 state.a.b 时才创建内层代理,这种惰性代理对首次读取和内存有什么含义? 本文先给出可直接复述的结论,再用最小代码说明Vue reactive 深层对象 惰性代理的工作方式、判断依据、项目边界和常见误区。
Vue computed 内部读取了普通模块级变量后,为什么该变量变化不会让 computed 自动失效? 本文先给出可直接复述的结论,再用最小代码说明Vue computed 读取非响应式变量 不失效的工作方式、判断依据、项目边界和常见误区。
定位“这个 Vue computed 为什么重算”时,onTrack/onTrigger 能提供哪两类证据,使用时机有什么限制? 本文先给出可直接复述的结论,再用最小代码说明Vue onTrack onTrigger 调试 computed的工作方式、判断依据、项目边界和常见误区。
Vue 3.5 的 <script setup> 中解构 props 为什么还能保持响应式,和普通 reactive 解构有何不同? 本文先给出可直接复述的结论,再用最小代码说明Vue 3.5 props 解构响应式的工作方式、判断依据、项目边界和常见误区。
通过 Vue reactive 代理调用对象方法时,方法里的 this 指向代理还是原对象,为什么这会暴露内部字段问题? 本文先给出可直接复述的结论,再用最小代码说明Vue reactive 方法 this 指向代理的工作方式、判断依据、项目边界和常见误区。
Vue 3 为什么用 Proxy 实现 reactive?从新增属性、删除、数组索引和原始对象绕过代理等场景解释拦截能力,区分 JavaScript 代理机制与 Vue 的依赖收集调度。
说明同一原始对象的代理复用、代理与 raw 不相等、嵌套对象及不同响应式边界的区别,并讨论 Set、Map、业务 ID 和绕过代理修改的影响。
把 readonly(reactive) 的对象传给 computed,computed 还能追踪源字段变化吗,试图经 computed 改它会怎样? 本文先给出可直接复述的结论,再用最小代码说明Vue readonly 对象 computed 追踪与修改的工作方式、判断依据、项目边界和常见误区。
把 Vue 的 readonly 状态传给子组件后被原地修改,开发期警告能说明什么,不能说明什么? 本文先给出可直接复述的结论,再用最小代码说明Vue readonly 被修改 警告 排查的工作方式、判断依据、项目边界和常见误区。
const box = ref({ a: { b: 1 } }) 时,box.value.a.b 的深改为什么默认仍可触发 Vue 更新? 本文先给出可直接复述的结论,再用最小代码说明Vue ref 包裹对象 深层响应式原理的工作方式、判断依据、项目边界和常见误区。
按深层对象属性、数组元素、Map 值与浅层对象区分 ref 解包,说明普通值赋值和新 ref 替换的不同效果,并提醒模板解包与 JavaScript 读取不能混为一谈。
Vue 响应式状态更新选“整对象替换”还是“原地 patch”,对 ref、reactive、shallowRef 的触发结果有何不同? 本文先给出可直接复述的结论,再用最小代码说明Vue replace patch state ref reactive shallowRef trigger的工作方式、判断依据、项目边界和常见误区。
面对只替换顶层字段的大型配置树,Vue 的 shallowReactive 比 reactive 更合适时必须接受什么代价? 本文先给出可直接复述的结论,再用最小代码说明Vue shallowReactive 适用场景与代价的工作方式、判断依据、项目边界和常见误区。
Vue 的 shallowRef 搭配 triggerRef 适合什么数据形态,为什么不能指望深层对象变更自动刷新? 本文先给出可直接复述的结论,再用最小代码说明Vue shallowRef triggerRef 使用场景的工作方式、判断依据、项目边界和常见误区。
为什么 const next = { ...state } 得到的多半不是 Vue 响应式状态,getter 属性在展开时会发生什么? 本文先给出可直接复述的结论,再用最小代码说明Vue reactive 展开运算符 失去响应式的工作方式、判断依据、项目边界和常见误区。
把 Vue 的 reactive proxy 直接交给 structuredClone 或 postMessage 可能失败,诊断第一步应检查什么? 本文先给出可直接复述的结论,再用最小代码说明Vue reactive structuredClone 报错 排查的工作方式、判断依据、项目边界和常见误区。
Vue reactive 使用 Symbol 作为键时,依赖追踪仍按 target-key 工作吗,序列化和模板可读性要注意什么? 本文先给出可直接复述的结论,再用最小代码说明Vue reactive Symbol 键 依赖追踪的工作方式、判断依据、项目边界和常见误区。
Vue 中调用 toRaw 解决对象相等或序列化前,需要评估哪些绕过响应式的风险? 本文先给出可直接复述的结论,再用最小代码说明Vue toRaw 绕过响应式 风险评估的工作方式、判断依据、项目边界和常见误区。
从单个字段、多个可枚举字段和可选属性说明 toRef 与 toRefs 的输入边界,补充 Vue 3.3 getter 规范化、只读 props 与直接复制字段值的区别。
用 track/trigger 描述 Vue 3 响应式时,getter 和 setter 各自必须记录或通知什么? 本文先给出可直接复述的结论,再用最小代码说明Vue track trigger 依赖收集与触发的工作方式、判断依据、项目边界和常见误区。
在通用工具函数里收到未知值,Vue 的 isRef/isReactive/isReadonly/isProxy 应如何组合判断? 本文先给出可直接复述的结论,再用最小代码说明Vue isRef isReactive isReadonly 组合判断的工作方式、判断依据、项目边界和常见误区。
Vue 依赖追踪用 WeakMap 管 targetMap,为什么这有助于响应式对象被垃圾回收? 本文先给出可直接复述的结论,再用最小代码说明Vue targetMap WeakMap 垃圾回收的工作方式、判断依据、项目边界和常见误区。
Vue 3 已经有 reactive,为什么还需要 ref? 本文先给出可直接复述的结论,再用最小代码说明Vue ref 和 reactive 原始值区别的工作方式、判断依据、项目边界和常见误区。
用摄氏温度与华氏温度映射说明可写 computed 的来源、转换和归一化规则,区分 setter 写回源状态与派生缓存,并解释异步保存、只读 props 和 getter 副作用的边界。