首页前端开发JavaScriptVue 内置组件keep-alive的使用示例

Vue 内置组件keep-alive的使用示例

时间2024-02-01 09:44:03发布访客分类JavaScript浏览1153
导读:收集整理的这篇文章主要介绍了Vue 内置组件keep-alive的使用示例,觉得挺不错的,现在分享给大家,也给大家做个参考。 目录一、keep-alive 用法使用示例:1.缓存所有页面...
收集整理的这篇文章主要介绍了Vue 内置组件keep-alive的使用示例,觉得挺不错的,现在分享给大家,也给大家做个参考。
目录
  • 一、keep-alive 用法
    • 使用示例:
      • 1.缓存所有页面:
      • 2.根据条件缓存部分页面
      • 3.结合vue-router,缓存部分页面
  • 二、keep-alive 生命周期
    • 1. activated
      • 2. deactivated

      keep-alive 是Vue内置的组件之一, 主要用于保留组件状态或避免重新渲染。

      作用

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

      一、keep-alive 用法

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

      当组件在 keep-alive> 内被切换,它的 activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。

      PRops:

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

      • include & exclude

      如果你只想缓存部分组件的状态,可以使用include属性。

      如果你想除掉一些组件,其他的才被缓存,可以使用exlucde属性。

      • max

      最多可以缓存多少组件实例。一旦这个数字达到了,在新实例被创建之前,已缓存组件中最久没有被访问的实例会被销毁掉。

      keep-alive :max="10">
            component :is="view">
          /component>
          /keep-alive>
          

      使用示例:

      1.缓存所有页面:

      keep-alive>
              router-view>
          /router-view>
              !--这里是会被缓存的组件-->
          /keep-alive>
          

      2.根据条件缓存部分页面

      (更多用法见官网API)

      template>
            div id="app">
            	// 1. 将缓存 name 为 newsList 或者 productList 的组件      keep-alive include='newsList,productList'>
                   router-view/>
                /keep-alive>
          		// 2. 将不缓存 name 为 test 的组件	keep-alive exclude='test'>
            	  router-view/>
          	/keep-alive>
            /div>
          /template>
          script>
      export default {
        name: 'App'}
          /script>
          

      注意:

      还有一步,你必须在需要被缓存状态的组件的script部分,给组件添加一个name属性。 如果没有使用keep-alive缓存状态的组件,可以不写name属性。但是如果使用了keep-alive缓存该组件状态,则此组件必须有这个属性。并且,这个属性的值,还必须跟标签中include属性的值完全一致,包括大小写。 以productList.vue组件为例 

      template>
              !-- 这里是productList组件的htML结构部分 -->
          /template>
          script>
      export default {
          name: "productList",  //如果使用了keep-alive缓存该组件状态,则此组件必须有这个属性。    data(){
              return {
      }
          }
          /script>
          

      3.结合vue-router,缓存部分页面

      export default new Router({
        mode: 'history',  routes: [    {
            path: '/',      name: 'home',      component: Home,      children: [        {
                path: 'products',          name: 'products',          component: products,          meta: {
              	keepAlive: true // 需要缓存      	  }
              }
      ,        {
                path: 'newsDetails',          name: 'newsDetails',          component: newsDetails,          meta: {
              	keepAlive: false  // 不需要缓存      	  }
              }
            ]    }
        ]}
          )

      在 App.vue 里面

      template>
            div id="app">
              keep-alive>
                router-view v-if="$route.meta.keepAlive">
          /router-view>
              /keep-alive>
              router-view v-if="!$route.meta.keepAlive">
          /router-view>
            /div>
          /template>
          script>
      export default {
        name: 'App'}
          /script>
          

      二、keep-alive 生命周期

      包含在 keep-alive 中创建的组件,会多出两个生命周期的钩子: activated 与 deactivated。

      1. activated

            在 keep-alive 组件激活时调用。

      在组件第一次渲染时会被调用,之后在每次缓存组件被激活时调用。

      第一次进入缓存路由/组件,在mounted后面,beforeRouteEnter守卫传给 next 的回调函数之前调用:

      页面第一次进入的时候,钩子触发的顺序是created-> mounted-> activated

      因为组件被缓存了,再次进入缓存路由/组件时,不会触发这些钩子:

        beforeCreate created beforeMount mounted 都不会触发。

      2. deactivated

            在 keep-alive 组件停用(离开路由)时调用。       

      使用了keep-alive就不会调用beforedestroy(组件销毁前钩子)和destroyed(组件销毁),因为组件没被销毁,被缓存起来了。

      这个钩子可以看作beforeDestroy的替代,如果你缓存了组件,要在组件销毁的的时候做一些事情,你可以放在这个钩子里。

        注意:

      1、 使用 keep-alive 会将数据保留在内存中,如果要在每次进入页面的时候获取最新的数据,需要在 activated 阶段获取数据,承担原来created钩子函数中获取数据的任务。

      2、只有组件被 keep-alive 包裹时,这两个生命周期函数才会被调用,如果作为正常组件使用,是不会被调用的,以及在 2.1.0 版本之后,使用 exclude 排除之后,就算被包裹在 keep-alive 中,这两个钩子函数依然不会被调用!

      3、以上这两个钩子函数在服务器端渲染期间不被调用。

      参考官方文档:cn.vuejs.org/v2/api/#kee…

      以上就是Vue 内置组件keep-alive的使用示例的详细内容,更多关于Vue 内置组件keep-alive的资料请关注其它相关文章!

      您可能感兴趣的文章:
      • Vue3内置组件Teleport使用方法详解
      • LRU算法在Vue内置组件keep-alive中的使用
      • vue.js内置组件之keep-alive组件使用
      • 详解Vue新增内置组件的使用

      声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

      vue

      若转载请注明出处: Vue 内置组件keep-alive的使用示例
      本文地址: https://pptw.com/jishu/595236.html
      详解React 父组件和子组件的数据传输 如何在Vue中实现Svelte的Defer Transition

      游客 回复需填写必要信息