vue 缓存组件keep-alive

kee-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染 。也就是所谓的组件缓存

//被keep-alive包含的组件会被缓存

    

keep-alive是一个抽象的组件,缓存的组件不会被mounted,为此提供activated和deactivated钩子函数
在2.1.0 版本后keep-alive新加入了两个属性: include(包含的组件缓存生效) 与 exclude(排除的组件不缓存,优先级大于include) 。

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

include 包含的组件(可以为字符串,数组,以及正则表达式,只有匹配的组件会被缓存)

exclude 排除的组件(以为字符串,数组,以及正则表达式,任何匹配的组件都不会被缓存)

max 缓存组件的最大值(类型为字符或者数字,可以控制缓存组件的个数)

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


// 组件name为c的组件不缓存(可以保留它的状态或避免重新渲染)
 
  


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


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

配合router使用

1.使用 include (exclude例子类似)##

//只有路径匹配到的 name 为 a 组件会被缓存

    

2.使用 meta 属性##

// routes 配置
export default [
  {
    path: '/',
    name: 'home',
    component: Home,
    meta: {
      keepAlive: true // 需要被缓存
    }
  }, {
    path: '/profile',
    name: 'profile',
    component: Profile,
    meta: {
      keepAlive: false // 不需要被缓存
    }
  }
]


    
        
    



    


1.keep-alive 先匹配被包含组件的 name 字段,如果 name 不可用,则匹配当前组件 components 配置中的注册名称。
2.keep-alive 不会在函数式组件中正常工作,因为它们没有缓存实例。
3.当匹配条件同时在 include 与 exclude 存在时,以 exclude 优先级最高(当前vue 2.4.2 version)。比如:包含于排除同时匹配到了组件A,那组件A不会被缓存。
4.包含在 keep-alive 中,但符合 exclude ,不会调用activated和 deactivated。

参考 https://juejin.cn/post/6844903918313406472
参考 https://www.imooc.com/article/302879

你可能感兴趣的:(vue 缓存组件keep-alive)