当前位置: 首页 > news >正文

如何理解vue组件失活与激活及导航全流程

在 Vue.js 中,组件的失活(deactivation)与激活(activation)是与路由相关的概念,主要用于处理组件的缓存和复用。这些概念通常与 Vue Router 的 keep-alive 组件结合使用,以实现高效的组件管理。

1. 组件失活与激活的概念

激活(Activation)

当一个组件被激活时,它会被加载到 DOM 中,并且可以与用户交互。激活通常发生在以下场景:

  • 组件首次被访问时。
  • 组件从缓存中被重新加载时。
失活(Deactivation)

当一个组件被失活时,它被从 DOM 中移除,但其状态可以被保留。失活通常发生在以下场景:

  • 用户导航到其他路由,当前组件不再需要显示时。
  • 组件被缓存,但暂时不显示。

2. keep-alive 的作用

keep-alive 是 Vue 的一个内置组件,用于缓存动态组件,避免重复渲染。它提供了两个生命周期钩子:

  • activated:当组件被激活时调用。
  • deactivated:当组件被失活时调用。

通过这两个钩子,你可以在组件激活和失活时执行特定的逻辑,例如加载数据或清理资源。

3. 使用场景

场景 1:缓存组件

如果你希望某些组件在用户离开后仍然保持状态(例如表单数据或滚动位置),可以使用 keep-alive

<template><keep-alive><router-view></router-view></keep-alive>
</template>
场景 2:优化性能

对于一些不需要频繁重新加载的组件,使用 keep-alive 可以显著提高性能。

场景 3:管理资源

在组件失活时清理资源(如定时器、事件监听器等),在组件激活时重新初始化。

<template><keep-alive><router-view></router-view></keep-alive>
</template><script>
export default {activated() {console.log('Component is activated');// 初始化资源},deactivated() {console.log('Component is deactivated');// 清理资源}
};
</script>

4. 导航全流程

Vue Router 的导航流程包括以下几个阶段:

  1. 导航触发

    • 用户点击链接或调用 router.push() 触发导航。
  2. 全局前置守卫(beforeEach

    • 在导航触发后,全局前置守卫被调用。你可以在这里进行权限检查或加载全局数据。
    • 如果返回 false 或调用 next(false),导航中断。
  3. 路由独享的前置守卫(beforeEnter

    • 在进入特定路由时,路由独享的前置守卫被调用。你可以在这里进行路由级别的权限检查或加载数据。
  4. 组件内的路由守卫

    • beforeRouteEnter:在进入组件时调用。由于此时组件尚未加载,无法访问 this
    • beforeRouteUpdate:在路由更新时调用。可以访问 this
    • beforeRouteLeave:在离开组件时调用。可以访问 this
  5. 全局解析守卫(beforeResolve

    • 在所有组件内路由守卫和独享路由守卫解析完后调用。可以在这里进行最后的检查。
  6. 全局后置钩子(afterEach

    • 在导航完成后调用。可以在这里进行日志记录或通知。

5. 组件激活与失活的生命周期

keep-alive 中,组件的激活和失活生命周期如下:

  • 激活(activated

    • 当组件从缓存中被重新加载到 DOM 中时调用。
    • 可以在这里重新初始化数据或重新加载资源。
  • 失活(deactivated

    • 当组件被移出 DOM 并进入缓存时调用。
    • 可以在这里清理资源或保存状态。

6. 示例代码

<template><keep-alive><router-view></router-view></keep-alive>
</template><script>
export default {activated() {console.log('Component is activated');// 初始化资源},deactivated() {console.log('Component is deactivated');// 清理资源}
};
</script>

7. 总结

  • 组件激活(activated:组件从缓存中被重新加载到 DOM 中时调用。
  • 组件失活(deactivated:组件被移出 DOM 并进入缓存时调用。
  • keep-alive:用于缓存组件,避免重复渲染,提高性能。
  • 导航流程:包括全局前置守卫、路由独享守卫、组件内守卫、全局解析守卫和全局后置钩子。

通过合理使用 keep-alive 和生命周期钩子,你可以更好地管理组件的状态和资源,优化应用的性能和用户体验。

http://www.lryc.cn/news/620048.html

相关文章:

  • 免费专业PDF文档扫描效果生成器
  • PHP imagick扩展安装以及应用
  • GISBox工具处理:将高斯泼溅模型导出为3DTiles
  • 【Android】四种不同类型的ViewHolder的xml布局
  • transforms的使用 小土堆pytorch记录
  • 专题:2025抖音电商与微短剧行业研究报告|附150+份报告PDF汇总下载
  • MATLAB 绘图速查笔记
  • 如何通过 Actor 网络压缩为概率分布实现
  • 使用 python-pptx 完成 ppt 页面的复制
  • 终端安全检测与防御
  • Open3d:从mesh中采样点云的两个函数
  • round robin轮询仲裁器
  • 2025 开源语音合成模型全景解析:从工业级性能到创新架构的技术图谱
  • hutool 作为http 客户端工具调用的一点点总结
  • 理解RESTful架构:构建优雅高效的Web服务
  • 《Unity Shader入门精要》学习笔记一
  • Dimensional Analysis量纲分析入门
  • 【Excel】被保护的文档如何显示隐藏的行或列
  • MongoDB 入门指南二:索引 —— 让查询速度飞起来
  • 随想记-excel报表美化
  • 选择排序专栏
  • 使用 6 种方法将文件从 Android 无缝传输到iPad
  • C# 反射和特性(获取Type对象)
  • 攒钱学概论:5、创业术
  • window显示驱动开发—DirectX 9 资源创建
  • 《AVL树的原理与C++实现:详解平衡二叉搜索树的高效构建与操作》
  • 【自动化运维神器Ansible】playbook主机清单变量深度解析:主机变量与组变量的实战应用
  • JavaWeb-Servlet基础
  • CodeBuddy在AI开发方面的一些特色
  • 1.Cursor快速入门与配置