keep-alive component

515 阅读2分钟
  • 业务上的需求是
  1. 根据用户登陆进来不同的身份展示不同的tab页,所以tab页是灵活的。所以用动态组件

  2. tab来回切换用到了keep-alive缓存组件内容。

结合使用组件:

    <keep-alive>
         <component :is="item.name" :include="whiteList" :exclude="blackList"></component>
    </keep-alive>
    
    底部data定义变量
    whiteList:['styleLibrary','OrderList','SalesData'],
    blackList:['Footer'],

通过灵活改变is绑定的值来显示不同的组件,多个tab页用的for循环

- keep-alive

keep-alive 包裹的组件在 created 生命周期时会创建一个 cache 对象,保存 vnode 节点,在需要渲染时将 vnode 从 cache 对象中取出来渲染,在组件销毁 destroyed 时清除 cache。

通过 include 和 exclude 确定需要缓存的组件和不需要缓存的组件。

生命周期有两个,actived,deactived activated:组件被缓存后进入组件触发的事件,使用场景: 比如我们缓存了一个组件,但是在进入组件之后还要调某一个接口,而不是调所有接口,就可以把方法写到这里面 deactivated:退出组件时候调用的方法。

  • 延伸: keepalive这个概念在很多地方都有用到,比如
  1. tcp也用到了keepalive这个概念,意思是检测链接的可用性,发送空包确定还在链接状态
  2. http也用到了keep-alive,加了中线,在请求头中加入connection:keep-alive,意思是告诉服务端,在发送完数据以后不要关闭连接,后面还会有别的请求,这样可以避免重复三次握手四次挥手

- component 动态组件

动态组件的原理是多个组件使用同一个挂载点,并且动态切换。这个实在不知道说啥。

延伸的有个异步组件可以说一说 类似的说法还有按需加载

异步组件就是在定义路由的时候不是单纯的引入组件,而是通过函数的方式引入

const first = r => require.ensure([], () => r(require('../components/first.vue'``)), 'chunkname1')

通过函数加载的方式可以在组件被调用时才加载组件,这样减少了首屏加载所有组件的压力,

  • 第一个参数是模块的依赖,一般定义组件都是[]
  • 第二个参数是加载完成后的回调函数,
  • 第三个参数是指定chunk名称,名称一样的会放在同一个文件夹

网上看到一句 但是还是不太理解 webpack把这个模块导出一个js文件,然后用到这个模块的时候,就动态构造script标签插入DOM,再由浏览器去请求。回调函数是在依赖加载完成之后执行。