alive的不生效 keep vue_vue的keep-alive讲解

功能简介

keep-alive是vue2.0加入的一个特性, 能缓存某个组件,或者某个路由。缓存的好处:

  1. 节省性能消耗,避免一个组件频繁重新渲染,节省开支
  2. 保存用户状态,比如说:我们在填写收货地址的页面,需要跳转到另一个页面通过定位选择地址信息再返回继续填写,这时候需要缓存收货地址页面,避免跳转页面导致用户数据丢失。

基础方法:

缓存组件,被keep-alive只会渲染一次

缓存路由,所有在keep-alive标签下的路由都会被缓存 :

进阶用法

有些时候,我们只需要缓存部分页面或者某些组件。

方法一:router.mate

在路由里面配置:

const router = [  {   name: 'login',   path: '/login',   component: login,  },  {   path: '/createResume',   name: 'createResume',   component: createResume,   meta: {    isKeepAlive: true   }  },  {   path: '/test',   name: 'test',   component: test,   meta: {    isKeepAlive: true   }  } ]

利用路由元数据配置了一个isKeepAlive,来判断是否需要缓存该页面,在应用路由的地方需要做如下改动:

这样设置,test和createResume2 个页面就会被缓存,而其他页面就不会被缓存,在跳转的时候会被销毁。

方法二:inlcude/exclude

inlcude包含该组件就缓存,exclude不包含该组件就缓存,二者都可以用逗号分隔字符串、正则表达式或一个数组来表示:

我们看到component是渲染动态组件用的,它渲染的组件跟is后面的组件名称有关系,当componentName变化是,包含在include里面的正则表达式:/mytable | mybuttom/里面的组件会被缓存起来,再次出现时,不会重新created,而不在exclude里面的组件会被缓存。上面的使用方式对于路由来说,也适用。 注意:所有的匹配都是匹配组件的 name,没有设置 name 的组件或者路由则不会被匹配

方法三:动态判断

我们只需要动态改变keepAliveArr里面的值就能动态设置哪些组件或者路由页面需要缓存了,很灵活。

被缓存组件的钩子函数

我们都知道vue组件的生命周期会触发beforeCreate、created 、beforeMount、 mounted这些钩子函数,但是被缓存的组件或者页面在第一次渲染之后,再次进入不会再触发上面的钩子函数了,而是触发activated钩子函数,可以将逻辑放到这里面去做。

同理:离开缓存组件的时候,beforeDestroy和destroyed并不会触发,可以使用deactivated离开缓存组件的钩子来代替。 更多更细节的讲解可以参考vue的官方文档: 官方文档[1]

学习如逆水行舟,不进则退,前端技术飞速发展,如果每天不坚持学习,就会跟不上,我会陪着大家,每天坚持推送博文,跟大家一同进步,希望大家能关注我,第一时间收到最新文章。

公众号前端每日面试题分享:

2728da09b1a6e1102f024d2b9515d797.png

参考资料

[1]

官方文档: https://cn.vuejs.org/v2/api/#keep-alive

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值