• vue常见的keep-alive问题


    一、什么是keep-alive?

    keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。keep-alive 是一个抽象组件:它自身不会渲染成一个 DOM 元素,也不会出现在父组件链中。

    二、keep-alive的优点?

    在组件切换过程中 把切换出去的组件保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性

    三、keep-alive有三属性

    include - 字符串或正则表达,只有匹配的组件会被缓存
    max-数字,最多可以缓存多少组件实例
    exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存

    代码

    1. <keep-alive include="home">
    2. <router-view />
    3. </keep-alive>
    4. //这串代码表示home组件会被缓存,而其他路由没配置就不会被缓存

    四、keep-alive的使用会触发两个生命周期函数?

    • activated 在keep-alive组件激活之前也就是当显示组件时触发
    • deactivated 在keep-alive组件激活之后当隐藏缓存组件时触发

    五、使用场景

    使用原则:当我们在某些场景下不需要让页面重新加载时我们可以使用keepalive

    举个栗子:
    当我们从首页–>列表页–>商详页–>再返回,这时候列表页应该是需要keep-alive

    从首页–>列表页–>商详页–>返回到列表页(需要缓存)–>返回到首页(需要缓存)–>再次进入列表页(不需要缓存),这时候可以按需来控制页面的keep-alive

    在路由中设置keepAlive属性判断是否需要缓存

    1. {
    2. path: 'list',
    3. name: 'itemList', // 列表页
    4. component (resolve) {
    5. require(['@/pages/item/list'], resolve)
    6. },
    7. meta: {
    8. keepAlive: true,
    9. title: '列表页'
    10. }
    11. }

    使用 <keep-alive>

    1. <div id="app" class='wrapper'>
    2. <keep-alive>
    3. <!-- 需要缓存的视图组件 -->
    4. <router-view v-if="$route.meta.keepAlive"></router-view>
    5. </keep-alive>
    6. <!-- 不需要缓存的视图组件 -->
    7. <router-view v-if="!$route.meta.keepAlive"></router-view>
    8. </div>

    六、缓存后如何获取数据

    解决方案可以有以下两种:

    • beforeRouteEnter
    • activated

    beforeRouteEnter

    每次组件渲染的时候,都会执行beforeRouteEnter

    1. beforeRouteEnter(to, from, next){
    2. next(vm=>{
    3. console.log(vm)
    4. // 每次进入路由执行
    5. vm.getData() // 获取数据
    6. })
    7. },

    activated

    keep-alive缓存的组件被激活的时候,都会执行activated钩子

    1. activated(){
    2. this.getData() // 获取数据
    3. },

    注意:服务器端渲染期间acvtived不被调用。

  • 相关阅读:
    对渗透新人的几点建议
    扩展卡尔曼滤波器
    【图像生成Metrics】快速计算FID、KID、IS、PPL
    BiDi光纤通过哪些方式增强宽带传输能力?
    CI/CD---使用新版云效流水线自动部署前端Vue项目
    当被问到你使用过iframe吗?有哪些优点和缺点?
    uniapp开发微信小程序:为什么用户授权信息弹窗没有了?
    在 CSS 中,怎样有效地优化样式表的加载性能,减少页面加载时间?
    开源SPL助力JAVA处理公共数据文件(txtcsvjsonxmlxsl)
    k8s--基础--6.1--环境搭建--多master高可用集群
  • 原文地址:https://blog.csdn.net/m0_64346035/article/details/124929553