在 Vue 中,组件同时使用 mounted 生命周期钩子和 keep-alive 包裹时的 activated 钩子,它们的触发优先级是怎样的?
考察说明
考查对 Vue 组件生命周期和 keep-alive 缓存机制的理解,以及钩子触发顺序的掌握。
回答思路
- 【回答框架 1】mounted 是组件实例被挂载后执行的生命周期钩子,只在组件初次创建并插入 DOM 时触发一次。activated 是配合 keep-alive 使用的钩子,在组件被 keep-alive 缓存后,每次重新进入(激活)时触发,初次进入时也会触发。
- 【回答框架 2】当组件被 keep-alive 包裹时,初次挂载顺序为:mounted 先触发,随后 activated 触发。这是因为 mounted 表示挂载完成,而 activated 表示组件被激活,激活发生在挂载之后。
- 【回答框架 3】当组件被缓存后再次进入(如通过 v-if 切换或路由切换),此时组件不会重新执行 mounted,因为组件实例被复用,只触发 activated 钩子。
- 【回答框架 4】在组件内部,activated 和 deactivated 钩子与 mounted/destroyed 类似,但 activated 是 keep-alive 特有,用于在缓存中恢复状态或执行数据刷新等操作。
- 【回答框架 5】总结优先级:初次挂载时,mounted 早于 activated;后续激活时,只触发 activated,mounted 不再触发。
- 【关键点 1】初次挂载顺序为 mounted → activated。
- 【关键点 2】keep-alive 缓存后再次进入只触发 activated。
- 【关键点 3】mounted 只在页面初次加载时执行一次。
- 【易错点 1】误以为 activated 每次都会触发 mounted,实则缓存后复用实例。
- 【易错点 2】在 mounted 中获取数据,组件被缓存后数据不会自动更新,需在 activated 中处理。
- 【易错点 3】activated 触发时组件已挂载,可安全访问 DOM。