keep-alive 是vue内置组件 缓存组件内部状态 避免重新渲染

<keep-alive > 是vue内置的一个组件,可用于缓存动态组件 ,使包裹的动态组件在切换时 保存状态,避免重新渲染

可以缓存组件,也可以缓存路由

复制代码
    <template>
       <div>

        <button @click="switchPage">切换页面</button>

        <keep-alive >

          <component :is="curentComponent"></component>

        </keep-alive>

      </div>
    </template>

<script>

import ComponentA from '@/components/ComponentA.vue'

import ComponentB from '@/components/ComponentB.vue'

import ComponentC from '@/components/ComponentC.vue'

export default {

  components: {

    ComponentA,

    ComponentB,

    ComponentC

  },

  data () {

    return {

      user: {},

      curentComponent: 'ComponentA'

    }

  },

 methods: {

    switchPage () {

      this.curentComponent = this.curentComponent === 'ComponentA' ? 'ComponentB' : 'ComponentA'

    },

}

}

</script>

keep-alive 缓存的组件会有两个钩子函数:activated 和 deactivated

第一次进入被缓存的组件A 会触发beforeCreate ==>created ==>beforeMount ==>mounted ==>activated

离开被缓存的A组件 进入被缓存的B组件,会触发A组件的 deactivated ,则第一次进入被缓存的B组件 会触发beforeCreate ==>created ==>beforeMount ==>A组件的deactivated ==>mounted ==>activated

第二次再进这个被缓存的组件A 只触发activated ,不会再触发beforeCreate, created , beforeMount, mounted

keep-alive 可配置 include 属性,需要保证组件的名称(name)与 include 的值相同的才会被缓存

<div>

<button @click="switchPage">切换页面</button>

<keep-alive include="ComponentBpage,ComponentCpage">

<component :is="curentComponent"></component>

</keep-alive>

</div>

exclude 排除 指定哪些组件不被缓存,优先级大于 include,同include ,需要保证组件的名称(name)与 exclude 的值相同

<div>

<button @click="switchPage">切换页面</button>

<!-- <keep-alive include="ComponentBpage,ComponentCpage"> -->

<keep-alive exclude="ComponentBpage">

<component :is="curentComponent"></component>

</keep-alive>

</div>

被缓存后的组件 数据获取方式:

activated 中获取,因为进入缓存组件 不会触发 created 和 mounted钩子函数,会触发activated钩子函数

在 beforeRouteEnter 钩子函数中,在路由进入之前先获取数据。每次组件渲染或者每次进入路由的时候,都会执行 beforeRouteEnter

缓存路由:

include 也可以使用数组,使用 v-bind

相关推荐
Mike_jia15 分钟前
Memos:知识工作者的理想开源笔记系统
前端
前端大白话15 分钟前
前端崩溃瞬间救星!10 个 JavaScript 实战技巧大揭秘
前端·javascript
loveoobaby16 分钟前
Shadertoy着色器移植到Three.js经验总结
前端
蓝易云19 分钟前
在Linux、CentOS7中设置shell脚本开机自启动服务
前端·后端·centos
浩龙不eMo20 分钟前
前端获取环境变量方式区分(Vite)
前端·vite
土豆骑士30 分钟前
monorepo 实战练习
前端
土豆骑士32 分钟前
monorepo最佳实践
前端
见青..33 分钟前
【学习笔记】文件包含漏洞--本地远程包含、伪协议、加密编码
前端·笔记·学习·web安全·文件包含
学习OK呀1 小时前
后端上手学习React Router基础知识
前端
宁静_致远1 小时前
React Native 技术栈:基于 macOS 开发平台的 iOS 应用开发指南
前端·javascript·react native