面试题答案
一键面试- 触发时机
- activated钩子函数:当被
keep - alive
缓存的组件被激活时触发。例如,在一个多视图切换的应用中,使用router - view
展示不同组件,其中某个组件被keep - alive
包裹,当从其他视图切换回该组件视图时,若该组件是被缓存的状态,就会触发activated
钩子函数。 - deactivated钩子函数:当被
keep - alive
缓存的组件失活时触发。还是上述多视图切换的场景,当从被keep - alive
缓存的组件视图切换到其他视图时,就会触发deactivated
钩子函数。
- activated钩子函数:当被
- 实际业务逻辑举例
- 数据加载:
- 在
activated
钩子函数中进行数据加载。比如一个新闻详情页面组件被keep - alive
缓存,在activated
钩子中,可以重新获取最新的评论数据展示,即使页面是从缓存中激活的,也能保证数据的实时性。
export default { activated() { this.$axios.get('/api/news/comments/' + this.newsId).then(response => { this.comments = response.data; }); } }
- 在
- 数据清理:
- 在
deactivated
钩子函数中进行数据清理。例如,在一个地图展示组件中,可能会创建一些地图相关的定时器(如自动更新地图标记位置的定时器),在deactivated
钩子函数中,可以清除这些定时器,避免内存泄漏。
export default { data() { return { autoUpdateTimer: null }; }, created() { this.autoUpdateTimer = setInterval(() => { // 更新地图标记位置的逻辑 }, 5000); }, deactivated() { clearInterval(this.autoUpdateTimer); } }
- 在
- 数据加载: