在 Vue3 和 vue-router4(next) 的 setup() 中使用 useRoute() 时,路由查询未定义
Route query is undefined when using useRoute() in setup() for Vue3 and vue-router4(next)
我将 Vue3 与 vue-router 4.0.5 一起使用,我遇到了一个问题,即 useRoute() 似乎正确地检索了路线,但路线的查询未定义,即使存在查询也是如此。
对于路径 /search?q=vue
是否期望 searchQuery
等于 vue
但它 returns 未定义。
在模板中,{{ $route.query.q }}
正确returns查询值。
import { useRoute } from "vue-router"
export default {
name: "Search",
setup() {
const route = useRoute()
const searchQuery = route.query.q
console.log(route)
console.log(searchQuery)
return {
searchQuery
}
}
}
<template>
<div>{{ $route.query.q }}</div>
</template>
当登录到控制台时,route
对象被正确记录并包含路由的查询对象,但 searchQuery
未定义。
我想知道为什么 searchQuery
在此示例中返回为未定义。
route
是异步更新的,您在更新实际发生之前记录它。
当您 console.log
对象时,浏览器会自动更新记录值以显示最新值。但是,这对于字符串而言并非如此,这就是 searchQuery
字符串在日志中为 undefined
而 route
对象是最新的原因。
在这种情况下,您应该使用 computed
prop to get the query. And if you want to observe the changes to the query, use a watch:
import { computed, watch } from 'vue'
export default {
setup() {
const route = useRoute()
const searchQuery = computed(() => route.query.q)
watch(searchQuery, newSearchQuery => console.log(newSearchQuery))
return {
searchQuery
}
}
}
我将 Vue3 与 vue-router 4.0.5 一起使用,我遇到了一个问题,即 useRoute() 似乎正确地检索了路线,但路线的查询未定义,即使存在查询也是如此。
对于路径 /search?q=vue
是否期望 searchQuery
等于 vue
但它 returns 未定义。
在模板中,{{ $route.query.q }}
正确returns查询值。
import { useRoute } from "vue-router"
export default {
name: "Search",
setup() {
const route = useRoute()
const searchQuery = route.query.q
console.log(route)
console.log(searchQuery)
return {
searchQuery
}
}
}
<template>
<div>{{ $route.query.q }}</div>
</template>
当登录到控制台时,route
对象被正确记录并包含路由的查询对象,但 searchQuery
未定义。
我想知道为什么 searchQuery
在此示例中返回为未定义。
route
是异步更新的,您在更新实际发生之前记录它。
当您 console.log
对象时,浏览器会自动更新记录值以显示最新值。但是,这对于字符串而言并非如此,这就是 searchQuery
字符串在日志中为 undefined
而 route
对象是最新的原因。
在这种情况下,您应该使用 computed
prop to get the query. And if you want to observe the changes to the query, use a watch:
import { computed, watch } from 'vue'
export default {
setup() {
const route = useRoute()
const searchQuery = computed(() => route.query.q)
watch(searchQuery, newSearchQuery => console.log(newSearchQuery))
return {
searchQuery
}
}
}