当前位置: 首页> 新闻> 会展 > keep-alive 是vue内置组件 缓存组件内部状态 避免重新渲染

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

时间:2025/9/11 14:28:15来源:https://blog.csdn.net/lryh_/article/details/140865334 浏览次数:0次

<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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: