You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue3中使用Vue Router链接时保持路由组件状态不重置

路由切换时保持Vue3组件状态的解决方案

当用Vue Router切换路由时,默认会销毁旧组件、创建新组件,导致组件状态被重置。要保留状态,核心是用Vue的<keep-alive>组件缓存路由视图。

基础用法:缓存所有路由组件

直接用<keep-alive>包裹<router-view>,所有路由渲染的组件都会被缓存,切换时不会重置状态:

<div>
  <div id="titleControl">
    <router-link :to="{ name: 'controls' }" class="tablink borderLink">
      Controls
    </router-link>
    <router-link :to="{ name: 'logs' }" class="tablink borderLink">
      Logs
    </router-link>
  </div>

  <!-- 包裹后缓存路由组件 -->
  <keep-alive>
    <router-view />
  </keep-alive>
</div>

进阶:只缓存指定组件

如果不需要缓存所有路由组件,可通过include属性指定目标组件(需匹配组件的name选项):

1. 给目标组件设置name

// Controls.vue
export default {
  name: 'Controls', // 名称要和include里的一致
  // ...组件逻辑
}

// Logs.vue
export default {
  name: 'Logs',
  // ...组件逻辑
}

2. 在<keep-alive>中指定include

<keep-alive include="Controls,Logs">
  <router-view />
</keep-alive>

也支持数组动态绑定:

<keep-alive :include="['Controls', 'Logs']">
  <router-view />
</keep-alive>

缓存组件的生命周期处理

缓存后的组件不会重复触发created、mounted等钩子,若需在组件激活/失活时执行逻辑,用activated和deactivated钩子:

Options API写法

export default {
  activated() {
    // 组件被激活时执行(比如刷新数据)
  },
  deactivated() {
    // 组件失活时执行(比如清理定时器)
  }
}

Composition API写法

import { onActivated, onDeactivated } from 'vue'

export default {
  setup() {
    onActivated(() => {
      // 激活时逻辑
    })

    onDeactivated(() => {
      // 失活时逻辑
    })
  }
}

内容的提问来源于stack exchange,提问作者Bilal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:55:21