13 vue3之内置组件keep-alive

内置组件keep-alive

有时候我们不希望组件被重新渲染影响使用体验;或者处于性能考虑,避免多次重复渲染降低性能。而是希望组件可以缓存下来,维持当前的状态。这时候就需要用到keep-alive组件。

开启keep-alive 生命周期的变化

初次进入时: onMounted> onActivated

退出后触发 onDeactivated

再次进入:

只会触发 onActivated

事件挂载的方法等,只执行一次的放在 onMounted中;组件每次进去执行的方法放在 onActivated

prors属性 includeexclude和max

<keep-alive :include="" :exclude="" :max="10"></keep-alive>

:include="['A']" 只缓存A组件

:exclude="['A']" 不缓存A组件

max是保存活性最高的10个组件 采用的是LRU算法(双向链表 + 散列表 的方式实现

代码示例

父组件

javascript 复制代码
<template>
  <div class="">keep-alive用于数据缓存</div>
  <keep-alive>
    <A v-if="flag"></A>
    <B v-else></B>
  </keep-alive>
  <!--  
    prors属性:
    <keep-alive :include="" :exclude="" :max="10"></keep-alive>
    :include="['A']" 只缓存A组件
    :exclude="['A']" 不缓存A组件
    max是保存活性最高的10个组件 采用的是LRU算法(双向链表 + 散列表 的方式实现)
  -->
  <button @click="flag = !flag">切换组件</button>

  <!-- 必须是这样的写法 -->
  <!-- 基本 -->
  <keep-alive>
    <component :is="view"></component>
  </keep-alive>

  <!-- 多个条件判断的子组件 -->
  <keep-alive>
    <comp-a v-if="a > 1"></comp-a>
    <comp-b v-else></comp-b>
  </keep-alive>

  <!-- 和 `<transition>` 一起使用 -->
  <transition>
    <keep-alive>
      <component :is="view"></component>
    </keep-alive>
  </transition>

  <!-- 开启keep-alive 生命周期的变化

初次进入时: onMounted> onActivated
退出后触发 deactivated
再次进入:
只会触发 onActivated
事件挂载的方法等,只执行一次的放在 onMounted中;组件每次进去执行的方法放在 onActivated中
 -->
</template>

<script setup lang="ts">
import A from "./components/thirteen_A.vue";
import B from "./components/thirteen_B.vue";
import { ref, reactive } from "vue";

let flag = ref("true");
</script>

<style lang="less" scoped></style>

A B 组件

javascript 复制代码
<template>
  <div class="">
    A组件
    <input type="text" />
  </div>
</template>

<script setup lang="ts">
import {
  ref,
  reactive,
  onMounted,
  onUnmounted,
  onActivated,
  onDeactivated,
} from "vue";

onMounted(() => {
  console.log("onMounted初始化"); // 全局只走一次,一个接口只走一次
});
onActivated(() => {
  console.log("onActivated,keep-alive初始化"); //开启了keep-alive后,才增加的生命周期
});
onDeactivated(() => {
  console.log("onDeactivated, keep-alive卸载"); //开启了keep-alive后,才增加的生命周期
});
onUnmounted(() => {
  console.log("onUnmounted卸载"); // 开启了keep-alive后 这个生命周期就不会走
});
</script>

<style lang="less" scoped></style>
javascript 复制代码
<template>
  <div class="">
    B组件
    <input type="text" />
  </div>
</template>

<script setup lang="ts">
import { ref, reactive } from "vue";
</script>

<style lang="less" scoped></style>

14 vue3之内置组件trastion系列-CSDN博客14 vue3之内置组件trastion系列。https://blog.csdn.net/qq_37550440/article/details/142387006?sharetype=blogdetail&sharerId=142387006&sharerefer=PC&sharesource=qq_37550440&spm=1011.2480.3001.8118

相关推荐
ldj202010 天前
vue3整合element-plus
vue3
夜空孤狼啸15 天前
前端常用拖拽组件库(vue3、react、vue2)
前端·javascript·react.js·typescript·前端框架·vue3
sunshine_程序媛15 天前
vue3中的watch和watchEffect区别以及demo示例
前端·javascript·vue.js·vue3
meng半颗糖16 天前
vue3 双容器自动扩展布局 根据 内容的多少 动态定义宽度
前端·javascript·css·vue.js·elementui·vue3
3D虚拟工厂17 天前
3D虚拟工厂
3d·vue3·blender·数字孪生·three.js
霸王蟹20 天前
前端项目Excel数据导出同时出现中英文表头错乱情况解决方案。
笔记·学习·typescript·excel·vue3·react·vite
friend_ship23 天前
Vue 项目实战:三种方式实现列表→详情页表单数据保留与恢复
keep-alive·路由传参·vuex/pinia·表单状态缓存
佚名猫24 天前
vue3+vite+pnpm项目 使用monaco-editor常见问题
前端·vue3·vite·monacoeditor
技术闲聊DD1 个月前
Vue3学习(4)- computed的使用
vue3·computed
蓝胖子的多啦A梦1 个月前
Vue3 (数组push数据报错) 解决Cannot read property ‘push‘ of null报错问题
前端·vue3·push·数组数据