vue的keep-alive的正确用法

keep-alive的正确用法

实现:

我有3个页面,

一个index页面,包含点击进入分类sort页面和进入详情detail页面两个功能
一个sort页面,包含上划加载,进入详情detail页面两个功能
一个detail页面,展示页面详情

我要实现的:

从index点击进入detail页面,回退仍旧处于之前进入的位置;
在这里插入图片描述
点击进入sort页面,回退仍旧处于之前进入的位置;
在这里插入图片描述
点击进入sort页面,并点击进入detail页面,返回sort时,sort页面仍旧处于之前进入的位置,继续返回index页面时,index页面仍旧处于之前进入的位置;
在这里插入图片描述
点击不同分类进入sort页面时,sort页面能更新数据。(重点,网上找的很多这一步进入的还是之前的页面,无法更新数据)

在这里插入图片描述

思路:

也就是说,index和sort页面将会需要使用keep-alive进行缓存,而detail页面由于大多数情况是每次进入是一个全新的详情,所以不用缓存。

keep-alive的用法:

基本可参考该文章:https://blog.csdn.net/yan263364/article/details/84402595

重点:

通过利用beforeRouteLeave这个钩子函数,
首先index和sort页是默认缓存的
然后index有2种跳转路径,如果跳往sort,我们希望sort能更新数据,毕竟用户选择不同分类跳转的概率更大,所以需要取消sort的默认缓存,改为不缓存,而跳往detail,肯定是不缓存的,无需处理。(to代表着将要跳往的地址,from代表本身目前地址,不懂的可以去看vue-router官网或者百度)
所以:index:
在这里插入图片描述
而sort也有2种跳转,跳入详情,我们本身是希望sort被缓存的,比便从detail回到sort不必重复请求,sort默认是缓存的,但是由于index跳入逻辑中有设置sort不缓存的情况,所以我们需要重设,在从sort跳入detail时设置sort为需要缓存,即激活keep-alive。第二种跳转,跳回index,此时我们并不需要sort是缓存的,毕竟我们希望当index跳入sort时是能够刷新数据的,而不是使用缓存,造成即使换了分类跳入仍旧是旧分类的bug。
sort:
在这里插入图片描述

重点讲完了,后面有空再详细补充。希望大家能够灵活运用。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vuekeep-alive 组件是用来缓存具有相同组件名称的组件的,例如在一个 Tab 页中不同的 Tab 相互切换时,当前 Tab 中的组件及其状态可以被 keep-alive 缓存,以避免在该 Tab 内重复加载组件和数据。 源码中实现了两个生命周期方法 activate() 和 deactivate() 来控制缓存中的组件的挂载和卸载。缓存中的组件通过 mount() 方法来挂载,并在 activated 钩子函数中调用 vnode 的 activated 钩子函数和组件的 activated 钩子函数。 当组件被激活(activated)时,keep-alive 会调用 activate() 方法,该方法会检查被缓存组件的缓存状态,并通过缓存对象的 updated 标志来决定组件是否需要重新挂载。如果需要重新挂载,则通过缓存对象的 vnode 函数重新渲染组件,并调用新组件的 mounted 和 activated 钩子函数。 当组件被停用(deactivated)时,keep-alive 会调用 deactivate() 方法,该方法会调用被缓存组件的 deactivated 钩子函数,并通过 VNode 的 tag 属性判断组件是否需要被销毁。如果不需要被销毁,则缓存对象会记录其销毁状态并保留其状态,下次使用时可以快速还原组件。如果需要被销毁,则通过调用缓存对象的 destroy() 方法来销毁组件并释放资源。 总之,Vue keep-alive 组件通过缓存组件的方式来提高应用程序的性能和用户体验,实现了快速切换和缓存组件的功能。它的核心在于更新缓存中的组件,并且在组件被激活和停用时触发生命周期函数来维护组件的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值