【前端系列】前端存档术之keep-alive

news2025/1/11 10:57:38

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.基本介绍
      • 1.问题分析?
      • 2.keep-alive 介绍?
    • 二.使用方式
      • 1.基本用法
      • 2.缓存特定组件
      • 3.自定义缓存 key
    • 三.项目实战
      • 1.App.vue
      • 2.MyHome.vue
    • 四.注意事项
      • 1.刷新数据
      • 2.keep-alive 包裹
      • 3.生命周期钩子
      • 4.不缓存的组件
      • 5.动态组件的销毁

一.基本介绍

1.问题分析?

在前端项目开发中,经常遇到需要保存当前页面参数的问题,如果当前页面填入筛选条件后进行查询,然后进入到子页面,再回到主页面,希望保持主页面之前的查询参数。如何实现呢?
开始我想到了使用前端缓存,localStorage 前端缓存起来,使用后发现太麻烦臃肿了,请教了前端同事,发现可以使用 keep-alive 组件。

2.keep-alive 介绍?

<keep-alive> 是 Vue.js 提供的一个抽象组件,用于缓存动态组件。通过使用 <keep-alive>,你可以保留组件的状态或避免重新渲染,从而提高应用性能。

二.使用方式

1.基本用法

<template>
  <div>
    <keep-alive>
      <component :is="currentComponent"></component>
    </keep-alive>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        currentComponent: "ComponentA",
      };
    },
  };
</script>

上面的例子中,<keep-alive> 包裹了一个动态组件,该组件根据 currentComponent 的值进行渲染。当切换组件时,<keep-alive> 会缓存当前组件的状态,以便下次切换回来时能够保持状态。

2.缓存特定组件

你可以通过给动态组件加上 keep-alive 特性来单独缓存该组件:

<keep-alive>
  <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>

上述例子中,只有带有 meta 字段中 keepAlivetrue 的路由组件才会被缓存。

3.自定义缓存 key

默认情况下,<keep-alive> 使用组件的名字作为缓存的 key。你可以通过设置 key 特性来自定义缓存 key:

<keep-alive :key="customKey">
  <component :is="currentComponent"></component>
</keep-alive>

在这个例子中,customKey 可以是一个动态变量,当它变化时,<keep-alive> 会重新渲染并缓存相应的组件。

三.项目实战

1.App.vue

在 App.vue 中使用 keep-alive 把 router-view 包裹起来

<template>
  <!-- 占位符 -->
  <keep-alive>
    <router-view></router-view>
  </keep-alive>
</template>

<script>
export default {
  name: "MyApp",
};
</script>

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

2.MyHome.vue

搜索其他 router-view 的位置,使用 keep-alive 把 router-view 包裹起来

<template>
  <el-container>
    <el-header>
      <!-- 头部区域 -->
      <MyHeader></MyHeader>
    </el-header>
    <el-container>
      <el-aside width="180px" style="overflow: hidden; padding-top: 24px">
        <MyAside></MyAside>
      </el-aside>
      <el-main style="padding: 0">
        <keep-alive>
          <router-view></router-view>
        </keep-alive>
      </el-main>
    </el-container>
  </el-container>
</template>

四.注意事项

1.刷新数据

进入页面后需要调接口刷新页面数据,不然可能会取前一次的数据,这样会导致数据不一致的异常。

activated() { this.redPackagePage() },

2.keep-alive 包裹

router-view 组件用到的位置都需要使用 keep-alive 组件包裹起来,不然不会生效,需要注意生效范围。

3.生命周期钩子

动态组件的生命周期钩子:

使用 <keep-alive> 时,动态组件的生命周期钩子不会每次都被调用。createdactivated 钩子在组件被缓存时不会被触发。如果需要在每次组件被激活时执行一些逻辑,可以使用 activated 钩子。

4.不缓存的组件

不缓存的组件:

对于一些不需要缓存的组件,可以通过设置 exclude 特性来排除:

<keep-alive exclude="ComponentB">
  <component :is="currentComponent"></component>
</keep-alive>

上述例子中,名为 ComponentB 的组件将不会被缓存。

5.动态组件的销毁

动态组件的销毁:

当使用 <keep-alive> 缓存组件时,组件并不会被销毁,而是被离开 DOM。如果希望在组件被销毁时执行一些清理工作,可以使用 deactivated 钩子。

<template>
  <div>
    <keep-alive>
      <router-view></router-view>
    </keep-alive>
  </div>
</template>

<script>
  export default {
    activated() {
      console.log("Component activated");
    },
    deactivated() {
      console.log("Component deactivated");
    },
  };
</script>

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1267289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows系统用nginx部署web应用

要在Windows系统上使用Nginx进行本地部署和运行Web应用程序&#xff0c;可以按照以下步骤进行操作&#xff1a; 1.首先下载nginx&#xff0c;需要去nginx官网&#xff1a; nginx: download 下载最新版本的&#xff1a; 2.解压缩Nginx&#xff1a;找个磁盘位置&#xff0c;新…

阿里云RDS标准版(x86) vs 经济版(ARM)性能对比

概述 阿里云数据库在去年云栖大会上发布了基于阿里倚天芯片&#xff08;ARM架构&#xff09;的RDS实例&#xff0c;后正式命名为经济版。本文通过标准的sysbench测试&#xff0c;来看看相比与标准版&#xff0c;经济版是否更加“经济”&#xff0c;以帮助开发者选择适合自己的…

报表生成器FastReport .Net用户指南:报告继承

我们经常会有许多数据相同的报告&#xff0c;例如&#xff0c;带有公司徽标和一些数据&#xff08;电子邮件、地址等&#xff09;的页眉/页脚。现在设想一下&#xff0c;您需要更改一些公司数据&#xff0c;例如电子邮件。您必须在每个报告中都这样做&#xff01;为了避免这种情…

KT1404C语音芯片做的板子连接usb到电脑出来空的盘符 怎么处理?

一、问题简介 KT1404C画的板子&#xff0c;连接usb到电脑&#xff0c;出来空的盘符&#xff0c;可以确定KT404C没问题放别的板子OK&#xff0c;就是这个板子不正常&#xff0c;并且芯片5脚的电压输出是3.5v &#xff0c;正常的板子是3.3v&#xff0c;什么问题呢&#xff1f; 问…

Wordpress自动定时发布怎么开通-Wordpress怎么自动发布原创文章

在当今数字化时代&#xff0c;博客已经成为许多人分享观点、经验和知识的重要平台。然而&#xff0c;对于博主们来说&#xff0c;每天按时发布一篇又一篇的文章可能是一项具有挑战性的任务。为了解决这个问题&#xff0c;一些创新的工具应运而生&#xff0c;其中包括WordPress的…

数据仓库数据管理模型

数据仓库分为贴源层、数据仓库层、数据服务层&#xff0c;有人叫做数仓数据模型&#xff0c;或者叫"数据管理模型”。 我们为什么要进行数据分层管理&#xff0c;下图的优点介绍已经说得比较明确&#xff0c;再补充几点&#xff1a; 保障数据一致性&#xff1a;上层的数…

HashMap源码解析-jdk1.8(三)

HashMap源码解析-jdk1.8&#xff08;三&#xff09;负载因子loadFactor为什么是0.75&#xff1f;HashMap的长度为什么是2的幂次方1. 与取余等价的算法2. 扩容时方便定位总结 HashMap源码解析-jdk1.8&#xff08;三&#xff09; 负载因子loadFactor为什么是0.75&#xff1f; /…

【深度解析】Jmeter性能测试指标的重要性与实现方法!

通常情况下&#xff0c;性能测试关注被测对象的时间与资源利用特性及稳定性。时间特性&#xff0c;即被测对象实现业务交易过程中所需的处理时间&#xff0c;从用户角度来说&#xff0c;越短越好。资源利用特性&#xff0c;即被测对象的系统资源占用情况&#xff0c;一般Web系统…

【axios】TypeScript实战,结合源码,从0到1教你封装一个axios - 基础封装篇

目录 前言版本环境变量配置引入的类型1、AxiosIntance: axios实例类型2、InternalAxiosRequestConfig: 高版本下AxiosRequestConfig的拓展类型3、AxiosRequestConfig: 请求体配置参数类型4、AxiosError: 错误对象类型5、AxiosResponse: 完整原始响应体类型 目标效果开始封装骨架…

Mac自动同步微信聊天记录(Mac显示资源库)

Mac自动同步微信聊天记录 在使用阿里云盘自动同步mac上微信的聊天记录时&#xff0c;遇到了/home/wangguagnjie/目录下没有资源库文件夹的情况 需要按照以下步骤将其显示到/home/用户名目录下&#xff0c;才能选中指定文件夹 使用阿里云盘&#xff0c;可以选择自动同步指定文…

ModBus电表与RS485电表有哪些区别?

在能源计量领域&#xff0c;ModBus电表和RS485电表是两种常见的设备&#xff0c;它们都具有监测和记录电能数据的功能。然而&#xff0c;它们之间存在一些区别&#xff0c;比如通信协议、连接方式、数据格式等等参数的区别有哪些&#xff1f; ModBus电表和RS485电表都是用于电能…

Java多线程其他细节知识

并发、并行 进程 并发的含义 并行的理解 线程的生命周期

奇葩问题:arp缓存与ip地址冲突(实际是ip地址被占用导致arp缓存出现问题)

文章目录 今天遇到个奇葩的问题 今天遇到个奇葩的问题 今天遇到个奇葩的问题&#xff0c;我把我们192.168.1.116的盒子ip改成192.168.2.116后&#xff0c;再改回来&#xff0c;发现我们盒子的http服务始终无法访问&#xff0c;用Advanced IP Scanner扫描一下&#xff0c;发现就…

虾皮选品分析工具:为卖家提供市场洞察和优化策略

随着电商平台的发展&#xff0c;越来越多的卖家选择在虾皮&#xff08;Shopee&#xff09;平台上销售产品。然而&#xff0c;如何在激烈的竞争中脱颖而出&#xff0c;成为卖家们面临的一大挑战。虾皮选品分析工具应运而生&#xff0c;为卖家提供了市场分析、选品策略和产品优化…

RHCSA---基本命令使用

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 Linux中终端中的很多操作都是通过命令行实现的&#xff0c;最常用的输入命令的方法有以下两种。 (1).打开自带的终端&#xff0c;类似于Windows中的CMD (2).ssh远程连接&#xff0c;关于…

VUE2中使用阿里云播放器AliPlayer

简述 基于 Vue 的播放器单页应用, 利用 web 播放器 sdk 进行视频点播&#xff0c;包含播放列表、字幕、多语言、自适应码率&#xff0c;皮肤自定义等功能 Web播放器文档 已知问题 vue中使用截图&#xff0c;不太好使【已自行优化】无键盘快捷键&#xff0c;无法通过空格暂停…

力扣:184. 部门工资最高的员工(Python3)

题目&#xff1a; 表&#xff1a; Employee ----------------------- | 列名 | 类型 | ----------------------- | id | int | | name | varchar | | salary | int | | departmentId | int | ----------------------- 在 SQL …

人工智能原理复习--知识表示(二)

文章目录 上一篇产生式表示法推理方式 结构化表示语义网络语义网络表示知识的方法和步骤应用题目 框架表示法下一篇 上一篇 人工智能原理复习–知识表示&#xff08;一&#xff09; 产生式表示法 把推理和行为的过程用产生式规则表示&#xff0c;所以又称基于规则的系统。 产…

9.二维数组——打印出杨辉三角形(要求打印出10行)

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为二维数组编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 打印出杨辉三角形&#xff08;要求打印出10行&#xff09;。 二、题目分析 三、解题 程序运行代码 #include<s…

基于SpringCloud的动漫论坛

基于SpringCloud的动漫论坛《BOKI》 摘要&#xff1a;鉴于现如今的互联网网站的存在形式&#xff0c;网站内部有可能内嵌论坛&#xff0c;因此&#xff0c;该项目中实现一个整体的、可移植性强的插件式论坛&#xff0c;论坛就有可能突破ACG主题的限制&#xff0c;实现论坛与主…