如何去保证一个组件的状态

<!-- vue2.x配置 --><keep-alive><router-view v-if="$route.meta.keepAlive" /></keep-alive>
<router-view v-slot="{ Component }"><keep-alive><component :is="Component" v-if="$route.meta.keepAlive"/></keep-alive><component :is="Component" v-if="!$route.meta.keepAlive"/></router-view>
key重复问题
https://github.com/vuejs/core/issues/1865
业务组件使用
路由配置-路由中配置好需要缓存的实例
{path: "/finance/difference",name: "Difference",meta: {title: "差错处理",keepAlive:true,auth: 27,},component: () => import(/* @vite-ignore */ "@/views/finance/difference/index.vue"),},{path: "/finance/processing",name: "Processing",meta: {title: "长款处理",keepAlive:true,auth: 136,},component: () => import(/* @vite-ignore */ "@/views/finance/processing/list.vue"),},
layout
引入组件实例的方式, 用keep-alive包裹
<router-view v-slot="{ Component }"><keep-alive><component:is="Component":key="$route.fullPath"v-if="$route.meta.keepAlive"/></keep-alive><component:is="Component":key="$route.fullPath"v-if="!$route.meta.keepAlive"/></router-view>
这里注意keep-alive ,有属性max,可以设置最大缓存组件数量,这里没有加限制
此时组件缓存已经生效,但是在组件业务的切换时,不会自动刷新请求
监听路由去控制请求(可用,不推荐)
import { onBeforeRouteUpdate } from "vue-router";
onActivated特殊周期(可用,推荐)
- 页面第一次进入的时候,钩子触发的顺序是created->mounted->activated,所以别在mounted和activated方法中写相同的逻辑代码
 - 多页面缓存需要配置key属性,来表示组件的唯一性和对应关系,如::key=”$route.path”
 - 不要动态修改meta.keepAlive的值控制是否缓存,因为第一次是创建组件,没有缓存,需要缓存后,下一次进入才不会触发逻辑代码,如果最开始进入的时候meta.keepAlive值为false的话,渲染的是没有使用keep-alive的组件,则会触发相应代码
 
onActivated(() => { // 被包裹组件被激活的状态下触发// 逻辑代码}onDeactivated(() => { // 在被包裹组件停止使用时触发// 逻辑代码})
