Vue3语法-keep-alive(内置缓存组件)

本文介绍了Vue中内置组件keep-alive的作用,用于避免频繁创建和销毁组件,保持组件状态。通过设置include和exclude属性,可以选择性地缓存组件。同时,当组件被缓存时,会触发activated和deactivated生命周期钩子,方便进行状态管理。

认识keep-alive:

  1. 我们想频繁切换组件中component标签,组件会被频繁的创建和销毁。
 <component :is='view'/>
  1. 我们不想这么频繁创建组件和销毁组件,并且保持组件的状态,这时就推荐使用内置组件:keep-alive
<keep-alive>
	<component :is='view'/>
</keep-alive>

keep-alive属性

  • include - string | RegExp(正则) | Array。只有名称匹配组件会被缓存
  • exclude - string | RegExp(正则) | Array。任何名称匹配的组件都不会被缓存
  • max - string | number。最多可以缓存多少组件实例,一旦达到这个数字,那么组件中醉经没有被访问的实例会被销毁;(很长时间每被访问的组件实例会被销毁)
<!-- 逗号分隔字符串 没有空格间隔 -->
<keep-alive include='a,b'>
	<component :is='view'/>
</keep-alive>

<!-- RegExp(正则) 使用‘v-bind’  -->
<keep-alive :include='/a|b/'>
	<component :is='view'/>
</keep-alive>

<!-- Array 使用‘v-bind’  -->
<keep-alive :include="['a','b']">
	<component :is='view'/>
</keep-alive>

(注意:名称匹配的组件自身的name选项)

export default{
	name:'view'
}

缓存组件的生命周期

想要监听切换组件推荐使用activateddeactivated

  • activated:组件活跃时触发
  • deactivated:组件不活跃触发
export default{
	activated(){
		console.log('activated')
	},
	deactivated(){
		console.log('deactivated')
	}
}
### Vue 3 中 `keep-alive` 组件使用Vue 3 中,`<keep-alive>` 组件提供了一种方式来缓存动态组件的状态,从而提高应用性能。这使得当用户在同视图间切换时,之前加载过的组件会被销毁而是保存其状态。 #### 基本语法结构 为了使 `<keep-alive>` 生效,需将其作为父级容器包裹住要缓存的目标组件: ```html <template> <div id="app"> <!-- 使用 include 和 exclude 来指定哪些组件应该被缓存 --> <keep-alive :include="[&#39;ComponentA&#39;, &#39;ComponentB&#39;]" :exclude="[&#39;ComponentC&#39;]"> <component v-bind:is="currentView"></component> </keep-alive> </div> </template> <script setup> import { ref } from &#39;vue&#39; const currentView = ref(&#39;ComponentA&#39;) </script> ``` 此代码片段展示了如何通过设置 `include` 或者 `exclude` 属性来自定义需要缓存的具体组件名称[^2]。 #### 动态组件key 控制 对于更加复杂的场景,可以通过给内部使用的 `<component>` 添加唯一的 `key` 属性来进行更细粒度上的控制。每当这个键值发生变化的时候,即使目标组件相同也会触发新的实例化过程而非重用旧有的缓存版本: ```html <template> <keep-alive> <component :is="viewName" :key="uniqueKey"></component> </keep-alive> </template> <script setup> // 示例省略具体逻辑... let uniqueKey = computed(() => /* 计算得出唯一标识 */); </script> ``` 这种方法特别适用于那些依赖外部数据源更新显示内容的情况,在每次获取到最新信息之后改变一次 `key` 就能强制刷新对应部分而影响其他已缓存的内容[^3]。 #### 利用生命周期钩子增强功能 除了上述方法外,还可以监听由 `<keep-alive>` 提供的一些特殊事件(如 activated / deactivated),以便执行额外的操作比如清理定时器、取消网络请求等资源释放工作;也可以用来页面离开前的数据持久化操作等等。 ```javascript export default { name: "MyComponent", activated() { console.log("The component is now visible and active."); }, deactivated() { console.log("The component has been hidden or replaced."); } }; ``` 这些钩子函数可以帮助开发者更好地管理组件在整个生命周期内的行为变化,确保最佳用户体验的同时也维护良好的内存管理和性能表现[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值