vue3 迫不得已我硬着头皮查看了keepalive的源代码,解决了线上的问题

🚀 优质资源分享 🚀

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
  • 1、通过本文可以了解到vue3 keepalive功能
  • 2、通过本文可以了解到vue3 keepalive使用场景
  • 3、通过本文可以学习到vue3 keepalive真实的使用过程
  • 4、通过本文可以学习vue3 keepalive源码调试
  • 5、通过本文可以学习到vue3 keepalive源码的精简分析

1、keepalive功能

  • keepalive是vue3中的一个全局组件
  • keepalive 本身不会渲染出来,也不会出现在dom节点当中,但是它会被渲染为vnode,通过vnode可以跟踪到keepalive中的cache和keys,当然也是在开发环境才可以,build打包以后没有暴露到vnode中(这个还要再确认一下)
  • keepalive 最重要的功能就是缓存组件
  • keepalive 通过LRU缓存淘汰策略来更新组件缓存,可以更有效的利用内存,防止内存溢出,源代码中的最大缓存数max为10,也就是10个组件之后,就开始淘汰最先被缓存的组件了

2、keepalive使用场景

  • 这里先假设一个场景: A页面是首页=> B页面列表页面(需要缓存的页面)===> C 详情页
    由C详情页到到B页面的时候,要返回到B的缓存页面,包括页面的基础数据和列表的滚动条位置信息
    如果由B页面返回到A页面,则需要将B的缓存页清空
  • 上述另外一个场景:进入页面直接缓存,然后就结束了,这个比较简单本文就不讨论了

3、在项目中的使用过程

vue3 keepalive (1).png

  • keepalive组件总共有三个参数

    • include:可传字符串、正则表达式、数组,名称匹配成功的组件会被缓存
    • exclude:可传字符串、正则表达式、数组,名称匹配成功的组件不会被缓存
    • max:可传数字,限制缓存组件的最大数量,默认为10
  • 首先在App.vue根代码中添加引入keepalive组件,通过这里可以发现,我这里缓存的相当于整个页面,当然你也可以进行更细粒度的控制页面当中的某个区域组件

    
 <router-view v-slot="{ Component }">
 <keep-alive :include="keepAliveCache">
 <component :is="Component" :key="$route.name" />
 keep-alive>
 router-view>
 
    <script lang="ts" setup>
 import { computed } from "vue";
 import { useKeepAliverStore } from "@/store";
 const useStore = useKeepAliverStore();
 const keepAliveCache = computed(() => {
 return useStore.caches;
 });

 script>

  • 通过App.vue可以发现,通过pinia(也就是vue2中使用的vuex)保存要缓存的页面组件, 来处理include缓存,和保存页面组件中的滚动条信息数据
    import { defineStore } from "pinia";

    export const useKeepAliverStore = defineStore("useKeepAliverStore", {
        state: () => ({
            caches: [] as any,
            scrollList: new Map(),  // 缓存页面组件如果又滚动条的高度
        }),

        actions: {
            add(name: string) {
                this.caches.push(name);
            },
            remove(name: string) {
                console.log(this.caches, 'this.caches')
                this.caches = this.caches.filter((item: any) => item !== name);
                console.log(this.caches, 'this.caches')
            },
            clear() {
                this.caches = []
            }
        }
    });

  • 组件路由刚刚切换时,通过beforeRouteEnter将组件写入include, 此时组件生命周期还没开始。如果都已经开始执行组件生命周期了,再写入就意义了。所以这个钩子函数就不能写在setup中,要单独提出来写。当然你也可以换成路由的其他钩子函数处理beforeEach,但这里面使用的话,好像使用不了pinia,这个还需要进一步研究一下。
    import { useRoute, useRouter, onBeforeRouteLeave } from "vue-router";
    import { useKeepAliverStore } from "@/store";
    const useStore = useKeepAliverStore()
    export default {
        name:"record-month",
        beforeRouteEnter(to, from, next) {
            next(vm => {
                if(from.name === 'Home' && to.name === 'record-month') {
                useStore.add(to.name)
                }
            });
        }
    }
    

  • 组件路由离开时判断,是否要移出缓存,这个
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3美团外卖我的页面源代码教程详细而言,首先需要了解Vue3和美团外卖的基本知识。Vue3是一套用于构建用户界面的渐进式JavaScript框架,而美团外卖是一款在线点餐平台。 在开始编写源代码之前,首先需要创建一个Vue3项目,并安装所需的依赖。然后,在项目的src目录下创建一个新的文件夹,命名为"myPage",用于存储我的页面相关的组件和文件。 在myPage文件夹下创建一个名为"MyPage.vue"的Vue单文件组件。在该文件中,首先导入所需的Vue组件和样式库,并定义一个默认的导出对象。在该对象中,可以定义页面的结构和逻辑。 接下来,可以在导出对象中定义页面的模板。可以使用HTML和Vue的模板语法来构建页面的结构,例如添加一个顶部栏、底部栏以及一些我的订单信息。 在模板中,可以使用Vue的数据绑定语法来展示动态数据,例如我的订单数量、地址等信息。可以在导出对象中定义相关的数据,并通过Vue的响应式机制来实现数据的动态更新。 在导出对象中,还可以定义一些方法和事件处理函数,用于处理用户的交互操作。例如点击某个按钮时,可以触发一个事件处理函数,实现相应的逻辑。 最后,将"MyPage.vue"组件导入到项目的主入口文件中,可以在需要展示我的页面的地方引用该组件。通过配置相关的路由,可以使用户能够通过URL访问到该页面。 总结来说,编写Vue3美团外卖我的页面源代码需要创建一个Vue单文件组件,定义页面的结构、样式和逻辑,使用Vue的数据绑定和响应式机制展示动态数据,以及处理用户的交互操作。在整个过程中要熟悉Vue3的基本语法和美团外卖的页面需求。最后,将该组件导入到项目中并配置相关的路由即可实现在网页中展示我的页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值