最标准方式是使用 useRouter 和 useRoute:useRouter 获取可编程导航实例,useRoute 响应式读取当前路由状态;不推荐通过 getCurrentInstance 获取。

在 Vue 3 项目中,配合组合式 API 获取路由实例最标准、最推荐的方式是直接使用 useRouter 和 useRoute 这两个官方组合式函数,无需依赖组件实例或代理对象。
用 useRouter 获取可编程导航能力
useRouter 返回的是全局路由实例,等价于 Options API 中的 this.$router,但更轻量、类型更明确:
- 它必须在
setup()或<script setup>中调用,不能在普通函数或副作用中直接使用 - 返回的对象支持
push、replace、back、forward等方法 - 注意:
router.currentRoute是一个Ref,读取时要加.value,例如router.currentRoute.value.path
用 useRoute 响应式读取当前路由状态
useRoute 返回的是一个响应式的路由对象,等价于 this.$route,但关键优势在于自动响应变化:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 当路由 path、params、query、hash 等发生变化时,
route.params.id等值会自动更新,无需手动监听 - 适合搭配
computed使用,比如const userId = computed(() => route.params.id) - 它包含完整字段:
path、name、params、query、hash、fullPath、matched、meta等
不推荐的旧方式:通过 getCurrentInstance 获取
在 Vue 2 或早期 Vue 3 兼容层(如 @vue/composition-api)中,有人会用 getCurrentInstance().proxy.$router。这种方式:
立即学习“前端免费学习笔记(深入)”;
- 已过时,仅用于兼容 Vue 2 项目迁移,新项目不应采用
- 存在潜在风险:
getCurrentInstance()在某些上下文(如异步 setup、非组件作用域)可能返回null - 类型提示弱,编辑器无法准确推导
$router和$route的结构
实际使用示例
在 <script setup> 中这样写即可:
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
// 导航
function goToUser(id) {
router.push({ name: 'user', params: { id } })
}
// 读取参数(自动响应变化)
const userId = route.params.id
const search = route.query.q


















