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

相关推荐
gis开发之家14 小时前
《Vue3 从入门到大神35篇》Vue3 源码详解(五):effect 依赖收集原理——track 与 trigger 是如何工作的?
javascript·typescript·前端框架·vue3·vue3源码
华玥作者2 天前
uniapp 万条数据不卡顿:我写了个虚拟列表组件 hy-list,原生支持瀑布流
数据结构·uni-app·list·vue3
sugar__salt3 天前
Vue3 基础知识点整理 —— 从入门到响应式核心完全指南
vue.js·笔记·vue·vue3
万亿少女的梦1684 天前
基于微信小程序、Spring Boot与Vue3的智慧养老管理系统设计与实现
spring boot·redis·微信小程序·mybatis·vue3
gis开发之家5 天前
《Vue3 从入门到大神33篇》Vue3 源码详解(三):响应式核心思想——从 Object.defineProperty 到 Proxy
前端·javascript·vue.js·vue3·vue3源码
gis开发之家6 天前
《Vue3 从入门到大神32篇》Vue3 源码详解(二):从 GitHub Clone 到断点调试,手把手搭建源码阅读环境
vue.js·前端框架·github·vue3·vue3源码
gis开发之家7 天前
vue3直击架构痛点 依赖倒置与接口隔离——打造坚如磐石的插件与高阶组件(HOC)模式
javascript·架构·typescript·前端框架·vue3
gis开发之家9 天前
《Vue3 从入门到大神29篇》单元测试与 E2E 测试 —— 保障 Vue3 项目的质量
前端·javascript·vue.js·单元测试·前端框架·vue3
雨季mo浅忆9 天前
上传文件夹
前端·vue3
蜡台12 天前
uniapp vue2 转 vue3
前端·javascript·uni-app·vue3·vue2