怎么缓存当前的组件?缓存后怎么更新?

今天研究下如果需要缓存组件,vue提供的解决方式keep-alive

文章目录


一、Keep-alive 是什么?

🍕🍕🍕内部实现的内置组件,解决的场景是 在组件切换过程中可以将状态保留在内存中,防止重复渲染 DOM,从防止重复渲染 DOM这个方面来看,是一种优化机制。

可以设置一下三个属性:

  • include -字符串或正则表达式。只有名称匹配的组件才会被缓存
  • exclude-字符串或正则表达式。任何名称匹配的组件都不会被缓存
  • max -数字。最多可以缓存多少组件实例。
    🌭🌭🌭基本用法
javascript 复制代码
<keep-alive>
  <component :is="view"></component>
</keep-alive>

使用 includeexclude

javascript 复制代码
<keep-alive include="a,b">
  <component :is="view"></component>
</keep-alive>
//正则表达式(使用v-bind)
<keep-alive :include="/a|b/">
	<component :is="view"></component>
</keep-alive>
// 数组(使用v-bind)
<keep-alive>
  <component is="view"></component>
</keep-alive>

🍟匹配机制 首先检查组件自身的name选项,如果name选项不可用,则匹配它的局部注册名称,匿名组件不能被匹配。

设置了keep-alive缓存的组件,会多出两个生命周期钩子,activateddeactivated

  • 首次进入组件时:beforeRouteEnter>beforeCreate>created>mounted>activated>beforeRouteLeave>deactivated
  • 再次进入组件时:beforeRouteEnter>activated>beforeRouteLeave>deactivated

二、使用场景

🍔当我们在某些场景下不需要让页面重新加载时我们可以使用keep-alive

例如:

首页>列表页>商品页>返回。

此时列表页是需要缓存的,按需来控制页面的 keep-alive

在路由中设置keep-alive属性判断是否缓存

javascript 复制代码
{
  path:'list',
  name:'itemList',
  component(resolve){
	require(['@/pages/item/list'],resolve)	
  },
  meta:{
	keepAlive:true,
	title:'列表页'
	}
}

使用

html 复制代码
<div id="app" class="">
 <keep-alive>
 //需要缓存的视图组件
	<router-view v-if="$route.meta.keepAlive"></router-view>
	// 不需要缓存的视图组件
	<router-view v-if="!$route.meta.keepAlive"></router-view>	
 </keep-alive>
</div>

缓存后如何获取数据

两种

  • beforeRouteEnter
  • actived

beforeRouteEnter

🍕 每次组件渲染时,会执行此函数

javascript 复制代码
beforeRouteEnter(to,from,next){
  next(vm=>{
	console.log(vm)
	vm.getData()//获取数据
	})
}

actived

在 缓存的组件被激活时,会执行 actived函数

javascript 复制代码
actived(){
  this.getData()
}

注意:服务器端渲染期间 actived 不被调用。

相关推荐
怕孤单的草丛3 小时前
缓存管理面临的主要问题
java·数据库·缓存
摇滚侠8 小时前
Redis7 零基础到进阶 Linux 离线安装 Redis 09-10
数据库·redis·缓存
zenithdev19 小时前
fastcache:为 Go 设计的低 GC 压力内存缓存
开发语言·其他·缓存·golang
烟漠河洛1 天前
线上事故复盘:Redis幂等性设计边界没覆盖跨状态请求,订单状态机直接崩了
数据库·redis·缓存
酷炫的水壶1 天前
使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
运维·nginx·缓存
夜影风1 天前
Redis集群创建时出现“Node xxx.xxx is not empty”问题处理
数据库·redis·缓存
utf8mb4安全女神1 天前
【Redis数据库】哨兵集群/redis集群/安装配置/主从复制/数据持久化操作/数据结构/安全限制/PHP redis/
linux·服务器·数据结构·数据库·redis·缓存
xto_coo1 天前
锡膏存储方法有哪些?
缓存
犹豫的大炮2 天前
jQuery最核心的基础设施之一——数据缓存模块进化史
前端·缓存·jquery
宠友信息2 天前
资源权限与钱包流水在即时通讯源码后端架构中的设计
java·spring boot·redis·websocket·缓存