Vue KeepAlive 为什么要用 onActivated 和 onDeactivated?
解释 KeepAlive 切换时组件实例被缓存而非卸载,说明 activated、deactivated 在首次挂载和最终卸载也会出现,并给出暂停恢复可见期订阅的示例。
侦听与生命周期专题面试题第 1 页,显示第 1–44 题,共找到 44 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
解释 KeepAlive 切换时组件实例被缓存而非卸载,说明 activated、deactivated 在首次挂载和最终卸载也会出现,并给出暂停恢复可见期订阅的示例。
解释 Vue 为什么缓冲组件更新任务,通过渲染次数记录展示同一段同步代码的多次赋值如何合并,并区分状态变化、任务去重与异步边界。
说明手动创建的定时器、全局事件与第三方实例需要在组件结束流程清理,比较 onBeforeUnmount 和 onUnmounted 的可用状态,并演示成对注册与移除。
解释 Vue effectScope 的收集边界,演示在 run 中创建多个响应式效果后统一 stop,并说明普通异步回调、外部资源与作用域停止后的返回值边界。
说明 effectScope(true) 不被当前父作用域收集的含义,演示父级停止后分离作用域仍响应,并给出模块单例、引用计数和服务端请求隔离的生命周期要求。
解释默认嵌套 effectScope 会被父级收集并级联停止,演示子级提前停止和父级继续工作的差别,并限定 detached 子级的例外。
设计一个由 detached effectScope 持有的共享响应式服务,通过首个消费者启动、引用计数归零停止,覆盖重复释放、重新启动、SSR 隔离与清理竞态。
比较 flush post 的 watch 与 watchPostEffect,演示读取更新后节点内容,说明显式源和自动依赖的差别,以及相对 nextTick 更适合持续同步的场景。
精确解释 Vue watch 默认 pre 调度相对所属组件与父组件更新的顺序,用组件文本读取示例区分新状态和旧 DOM,并说明初次执行选项不能混同更新时机。
解释 Vue 同步侦听的执行位置和失去批量合并的代价,通过两个字段连续赋值观察中间状态,说明适用的缓存失效场景以及不适合大型数组与 DOM 测量的原因。
解释 getCurrentScope 返回当前活动作用域或 undefined 的条件,给出要求受管调用与返回手动 dispose 的两种 API 设计,并澄清检查时机和异步边界。
解释生命周期 API 通过当前组件实例完成登记的机制,演示普通异步回调中的迟到注册只会告警且不会执行,并准确说明 script setup 顶层 await 的编译器特例。
整理 Vue 常用组合式生命周期钩子与选项式钩子的职责对应,重点解释 beforeCreate、created 为什么没有 on 前缀版本,以及同步注册、SSR 与缓存组件边界。
给出 Vue 父子组件首次挂载时 setup、onBeforeMount 和 onMounted 的常见顺序,通过内存渲染器可验证记录解释向下创建、向上完成,并覆盖异步组件与兄弟顺序边界。
给出 Vue 修改状态后等待 nextTick 再访问节点的写法,说明它等待更新刷新而不是网络、动画和浏览器绘制,并区分一次操作与持续 post 监听。
说明 onScopeDispose 会把清理登记到当前活动作用域,在 scope.stop 或组件作用域结束时执行,演示事件订阅释放,并覆盖无活动作用域与 Vue 3.5 静默参数。
解释 onErrorCaptured 捕获后代组件错误的参数和传播链,说明返回 false 会阻止继续到更高边界与全局 errorHandler,并覆盖降级渲染再次报错、日志和生产 info。
说明父组件 onMounted 会等待同步子组件,但不包含异步组件和 Suspense 树,给出可控制异步解析顺序的示例,并讨论父子完成协议、错误与卸载。
解释模板 ref 在 setup 时尚未绑定节点、onMounted 后可访问的原因,给出可判空的组件示例,并覆盖条件渲染、卸载竞态、SSR 和后续更新边界。
说明 onServerPrefetch 返回 Promise 后服务端渲染器会等待数据就绪再生成 HTML,给出可注入加载器的组件写法,并覆盖客户端补载、错误、去重和 hydration 边界。
沿着渲染、updated、写回、再次渲染的链条解释无限循环,给出用 computed 或显式 watch 代替节点后无条件写状态的方案,并区分有界守卫与掩盖问题。
解释 onUpdated 只在所属组件因响应式变化更新自身节点树后调用,演示子组件独立状态变化不会让未更新的父组件执行钩子,并覆盖批量更新与指定变化。
解释 setup 覆盖 beforeCreate 与 created 所在初始化阶段,给出按功能组织状态、监听和清理的组件示例,并区分 DOM、注入、异步初始化和 Options this 边界。
说明普通异步回调里创建的 Vue 侦听器为何无法自动归属组件,给出同步创建、延迟启用的写法,以及必须延迟创建时需要处理的卸载竞态。
比较 Vue watch 与 watchEffect 调试选项中的 onTrack 和 onTrigger,演示记录属性读取与写入事件,并区分依赖触发、队列调度和业务回调执行。
解释 deep 对嵌套读取与变化观察的影响,补充 Vue 3.5 数字深度边界、深监听不生成旧快照,以及大表单和大型数据树如何缩小监听范围。
分开解释 getter 何时重新求值与返回值怎样比较,说明普通变量没有通知、新对象身份导致回调,以及用原始派生值或稳定数据接口缩小观察范围。
区分创建侦听器时立即执行与首次变化后执行,说明初始旧值、组件挂载、初始请求去重以及 immediate 与 once、多个来源组合时的边界。
用页码和筛选状态说明 watch 来源数组的位置对应、getter 与快照的区别,以及同步变化批量调度、对象旧值和依赖条件重置的边界。
区分响应式对象引用和修改前快照,用实际代码比较深层对象监听与原始字段 getter,说明如何获得前后值、设计快照和避免回调内才复制旧值。
说明 Vue 3.4 起 once 在首次回调运行后自动停止,验证与 immediate 的组合行为,并区分第一次回调、第一次业务条件满足和异步操作成功一次。
区分传入原始属性快照、监听当前响应式子对象和跟随 prop 整体替换,说明 getter、空值防护、深度观察、只读边界与 Vue 3.5 props 解构的编译前提。
用连续切换资源编号的例子解释 Vue watch 请求竞态,给出清理回调、有效标记与 AbortController 组合写法,并覆盖错误和 loading 被旧请求误写的情况。
对比直接对象、对象 ref 和返回对象的 getter 三种入口,说明嵌套字段变化、整体替换与 deep 选项的区别,避免把对象本身具有响应式能力等同于所有监听默认深遍历。
分析 Vue watch 回调修改自身监听源形成的反馈链,区分收敛修正和无条件递增,给出输入规范化的有界示例,并说明调度选项不能修复循环设计。
按监听源类型解释 Vue watch 的取值、依赖与深层变化规则,说明为什么原始属性值不能代替 getter,以及组件更新、watch 回调读取和数据替换的边界。
解释 Vue watch 和 watchEffect 返回的停止句柄,演示停止前后的执行记录,并区分停止侦听、清理副作用和终止异步任务,适合面试回答与组件调试。
从纯派生结果与外部副作用区分 computed 和 watch,结合价格合计、自动保存与第三方控件同步,说明冗余状态、异步竞争和可写 computed 的边界。
解释 Vue watchEffect 的同步依赖收集窗口,给出 await 前固定请求参数的写法,并区分读取最新值、使用本轮快照和请求竞态三个不同问题。
解释 watchEffect 为什么不提供 newValue 和 oldValue,给出改用多源 watch 比较状态的示例,并讨论首次执行、对象快照和批量更新遗漏中间值的边界。
说明 Vue 3.5 侦听句柄的 pause、resume 和 stop,演示暂停期间多次修改后恢复观察最新状态,并区分暂停订阅执行、资源清理与状态事务。
从副作用与派生值的职责解释 watchEffect 的首次执行和 computed 的按需计算,通过调用记录观察首次读取、缓存复用与依赖变化,并澄清 post 调度的例外。
通过资源编号与语言设置的例子比较 Vue watch 和 watchEffect,说明显式源、自动同步依赖、首次执行和旧值的区别,并给出适合业务边界的选择依据。
澄清 Vue 3.5 onWatcherCleanup 的同步注册限制,比较 watch 第三个参数和 watchEffect 第一个参数提供的 onCleanup,并说明旧接口没有被新接口取代。