type
status
date
slug
summary
tags
category
icon
password

源码所在的目录:

notion image

源码大概做了什么:

核心函数:
notion image
可以看到keep alive是通过setup实现的
它的返回值
返回的是一个渲染函数 内部拿到默认插槽 并且检查是否只有一个子节点 最后将这个node返回 返回的还是我们的组件 keepalive是一个抽象的组件
 

具体是哪里缓存的呢?

notion image
setup中定义了相关缓存变量 其中cache为map结构的缓存 key为set结构
notion image
定义了pendingCacheKey这个变量来判断是否要缓存 初始为null
notion image
是在render函数中赋值的 所以首次不缓存 会有onmounted生命周期 render完成后 进行赋值和缓存

啥时候缓存的

notion image

缓存策略是怎么样的

notion image
LRU算法
 

生命周期相关

开启keep-alive 生命周期的变化
初次进入时: onMounted> onActivated 退出后触发 deactivated 再次进入: 只会触发 onActivated 事件挂载的方法等,只执行一次的放在 onMounted中;组件每次进去执行的方法放在 onActivated中
notion image
notion image
首先会做一个patch因为会有props改变的情况 然后执行子组件的生命周期 但deactivate不是真正的卸载 而是做了一个move操作存到临时容器
notion image
创建的容器
 
 

其他

对props的处理
notion image
CSS忽略/忘记的知识点Vue生命周期源码(浅)解读