Это продолжение моего предыдущего поста о том, как установить параметры запроса в Nuxt 3. Мы продолжим работу с кодом, написанным там, поэтому обязательно ознакомьтесь с ним.
Проблема, которую мы решаем
Мы остановились на том, что наш URL выглядит как localhost:3000/test?streamer=faker
. Это хорошо, но содержит несколько случаев, которые далеко не идеальны.
Поскольку параметр URL обновляется с использованием v-модели нашего ввода, при обновлении страницы мы теряем это локальное состояние и значение, хранящееся в twitchStreamer
.
Использование useRoute в Nuxt
Nuxt.js полагается на vue-router для большей части своей логики маршрутизации.
В нашем примере мы используем Composition API, одну из новых функций, встроенных в Nuxt 3.
Чтобы получить наш маршрут, мы используем приведение useRoute()
в наш setup()
. Nuxt 3 автоматически импортирует useRoute()
, поэтому мы можем выбрать явный или неявный.
setup() {
const route = useRoute()
}
Наличие нашего маршрута открывает все преимущества vue-router
, включая доступ к нашим параметрам запроса!
Сохранение параметра запроса
Имея доступ к нашему маршруту, мы можем проверить переменную запроса (что после знака = в streamer=
), используя route.query.streamer
.
Легкий!
Теперь я использую эту логику вместе с тернарным оператором с переменной twitchStreamer
.
const twitchStreamer = ref(route.query.streamer ? route.query.streamer : '')
Теперь каждый раз, когда страница переходит или обновляется, наш twitchStreamer
будет проверять, есть ли у нашего route
параметр запроса стримера.
Если это так, наш twitchStreamer
будет содержать значение параметра. В противном случае это будет пустая строка.
Окончательный фрагмент кода
<!-- pages/example.vue -->
<template>
<input v-model="twitchStreamer" />
</template>
<script>
setup() {
const route = useRoute()
const router = useRouter()
const twitchStreamer = ref(route.query.streamer ? route.query.streamer : '')
watch(twitchStreamer, (twitchStreamer, previous) => {
router.push({
path: '/test',
query: { streamer: twitchStreamer },
})
})
return { twitchStreamer }
</script>
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.