在 Vue 3 中,useRoute() 和 useRouter() 都来自 Vue Router,它们是组合式 API 的一部分,但用途完全不同。下面是最直观的对比和解释:
| API | 用途 | 类比 |
|---|---|---|
useRoute() | 获取当前路由的信息 | 相当于 this.$route |
useRouter() | 控制路由导航行为(跳转、前进等) | 相当于 this.$router |
| 功能点 | useRoute() | useRouter() |
|---|---|---|
| 获取当前路径 | ✅ | ❌ |
获取路由参数(params / query) | ✅ | ❌ |
| 获取当前路由名、meta 信息等 | ✅ | ❌ |
编程式导航(router.push()) | ❌ | ✅ |
返回上一页(router.back()) | ❌ | ✅ |
替换导航(router.replace()) | ❌ | ✅ |
示例:
useRoute() 用于“读”路由信息:
<script setup lang="ts">
import { useRoute } from 'vue-router'
const route = useRoute()
console.log(route.params.id) // 读取动态路径参数
console.log(route.query.q) // 读取查询参数
</script>
useRouter() 用于“操作”路由跳转:
<script setup lang="ts">
import { useRouter } from 'vue-router'
const router = useRouter()
const goHome = () => {
router.push('/') // 编程式导航到首页
}
</script>