MST

星途 面试题库

面试题:Vue中Keep - Alive在大规模项目里对组件状态保存的原理是什么

在大规模Vue项目中使用Keep - Alive,阐述它是如何保存和恢复组件状态的,例如data、computed属性等。并说明在不同生命周期钩子函数中,Keep - Alive对组件状态操作的差异。
17.2万 热度难度
前端开发Vue

知识考点

AI 面试

面试题答案

一键面试

Keep - Alive保存和恢复组件状态的原理

  1. 保存状态
    • Keep - Alive 是 Vue 的内置组件,它主要通过缓存组件实例来保存组件状态。当一个组件被 Keep - Alive 包裹时,在组件被切换出去(例如通过路由切换),它不会被销毁,而是被缓存起来。
    • 对于 data 属性,由于 data 是组件实例的属性,在组件被缓存时,data 的数据状态也随之被缓存。例如,如果一个组件的 data 中有一个计数器 count,当组件被切换出去时,count 的当前值会被保留在缓存的组件实例中。
    • computed 属性同样依赖于组件实例,并且具有缓存机制。在组件被缓存时,computed 相关的依赖追踪和计算结果也会被保留。当组件再次被激活时,computed 会基于缓存的状态和依赖关系进行计算。
  2. 恢复状态
    • 当被 Keep - Alive 缓存的组件再次被切换回来(激活)时,Vue 会从缓存中取出之前的组件实例,直接复用该实例,从而恢复组件的状态。
    • 这意味着 data 中的数据会保持切换出去之前的状态,computed 也会基于之前缓存的状态和依赖关系重新计算(如果依赖有变化),就好像组件没有被切换出去过一样。

不同生命周期钩子函数中 Keep - Alive 对组件状态操作的差异

  1. activated
    • 当被 Keep - Alive 缓存的组件被激活时,会触发 activated 钩子函数。
    • 在这个钩子函数中,组件已经从缓存中恢复,此时 datacomputed 等状态已经恢复到切换出去之前的状态。可以在这个钩子函数中执行一些需要在组件每次激活时进行的操作,例如重新加载一些数据(如果数据在组件未激活期间可能有变化),但不需要重新初始化 data 等状态,因为它们已经被 Keep - Alive 缓存并恢复。
  2. deactivated
    • 当组件被切换出去(失活)时,会触发 deactivated 钩子函数。
    • 在这个钩子函数中,组件即将被缓存,datacomputed 等状态会随着组件实例一起被缓存。可以在这个钩子函数中执行一些清理操作,例如清除定时器、解绑事件监听器等,但不需要手动保存 data 等状态,因为 Keep - Alive 会自动处理缓存。
  3. created、mounted 等常规生命周期钩子
    • 在组件首次创建(created)和挂载(mounted)时,Keep - Alive 并不影响这些钩子函数的正常执行。但是,当组件被缓存后再次激活时,这些钩子函数不会再次执行,因为组件实例是复用的,并非重新创建和挂载。这与正常情况下组件的切换和重新渲染是不同的,需要注意在这些钩子函数中执行的初始化操作不会在组件激活时重复执行。