码迷,mamicode.com
首页 > 其他好文 > 详细

vue中keepalive怎么理解??---vue中文社区

时间:2020-02-10 11:42:47      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:生命周期   怎么   属性   tps   表达   cti   总结   new   vat   

vue中keepalive怎么理解?

说在前面: keep-alive是vue源码中实现的一个组件, 感兴趣的可以研究源码 https://github.com/vuejs/vue/blob/dev/src/core/components/keep-alive.js

什么是keepalive

我们平时开发中, 总有部分组件没有必要多次init, 我们需要将组件进行持久化,使组件状态维持不变,在下一次展示时, 也不会进行重新init

keepalive音译过来就是保持活着, 所以在vue中我们可以使用keepalive来进行组件缓存

基本使用

  1. // 被keepalive包含的组件会被进行缓存

  2. <keep-alive>

  3.    <component />

  4. </keep-alive>

上面提到被keepalive包含的组件不会被再次init,也就意味着不会重走生命周期函数, 但是平常工作中很多业务场景是希望我们缓存的组件在再次渲染的能做一些事情,vue为keepalive提供了两个额外的hook

  • activated 当keepalive包含的组件再次渲染的时候触发

  • deactivated 当keepalive包含的组件销毁的时候触发

注: 2.1.0 版本后keepalive包含但被exclude排除的组件不会有以上两个hook

参数

keepalive可以接收3个属性做为参数进行匹配对应的组件进行缓存

  • include 包含的组件

  • exclude 排除的组件

  • max 缓存组件的最大值

其中include,exclude可以为字符,数组,以及正则表达式
max 类型为字符或者数字

代码理解

  1. // 只缓存组件name为a或者b的组件

  2. <keep-alive include="a,b">

  3.  <component :is="currentView" />

  4. </keep-alive>

  5.  

  6. // 组件名为c的组件不缓存

  7. <keep-alive exclude="c">

  8.  <component :is="currentView"/>

  9. </keep-alive>

  10.  

  11. // 如果同时使用include,exclude,那么exclude优先于include, 下面的例子也就是只缓存a组件

  12. <keep-alive include="a,b" exclude="b">

  13.  <component :is="currentView"/>

  14. </keep-alive>

  15.  

  16. // 如果缓存的组件超过了max设定的值5,那么将删除第一个缓存的组件

  17. <keep-alive exclude="c" max="5">

  18.  <component :is="currentView"/>

  19. </keep-alive>

配合router使用
  1. <!-- template -->

  2. // 意思就是$router.meta.keepAlive值为真是将组件进行缓存

  3. <keep-alive>

  4.    <router-view v-if="$router.meta.keepAlive"></router-view>

  5. </keep-alive>

  6. <router-view v-if="!$router.meta.keepAlive"></router-view>

  7.  

  8. //router配置

  9. new Router({

  10.    routes: [

  11.        {

  12.            name: ‘a‘,

  13.            path: ‘/a‘,

  14.            component: A,

  15.            meta: {

  16.                keepAlive: true

  17.            }

  18.        },

  19.        {

  20.            name: ‘b‘,

  21.            path: ‘/b‘,

  22.            component: B

  23.        }

  24.    ]

  25. })

总结

keepalive是一个抽象组件,缓存vnode,缓存的组件不会被mounted,为此提供activated 和 deactivated 钩子函数, 使用props max 可以控制缓存组件个数

vue中keepalive怎么理解??---vue中文社区

标签:生命周期   怎么   属性   tps   表达   cti   总结   new   vat   

原文地址:https://www.cnblogs.com/pwindy/p/12290107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!