#javascript #vue.js #vue-router #vuejs3
Вопрос:
Здравствуйте, у меня есть некоторая условная логика в моем представлении, основанная на текущей странице
в настройках у меня есть
const curVidType = ref(route.params.videoTopic);
Я возвращаю его, а затем распечатываю, как
<h1>Welcome to {{ curVidType }} videos</h1>
Однако это работает только в том случае, если я обновлюсь. Если я перейду на новую страницу, она останется старой, даже если URL-адрес браузера изменится. после обновления он обновляется. Большое спасибо за любую помощь
Ответ №1:
Попробуйте добавить :key
в свой компонент, чтобы убедиться, что он обновляется при изменении параметров:
<your-component :key="$route.params.videoTopic"></your-component>
Ответ №2:
Вы инициализируете переменную как константу, что означает, что она делает это один раз, а затем не устанавливает ее. Если вы измените curVidType на вычисляемое значение, вы можете заставить его реагировать на изменения параметров маршрутизатора.
computed: {
curVidType() {
return route.params.videoTopics
}
}
Для этого будет установлено значение curVidType, которое будет изменяться, когда это сделает видеопика
Редактировать:
Прочитав комментарии, просмотрев комментарии и прочитав некоторые документы, ref() создаст реактивный объект, но я не уверен, что он реагирует на исходный объект. Но похоже, что функция toRef() может создать этот мост.
const curVidType = toRef(route.params, 'videoTopics')
Должно позволять curVidType.value также отражать изменения в route.params.videoTopics
Комментарии:
1. Это не тот случай. Конечно
computed
, это должно помочь, ноref
возвращает ProxyObject с реактивнымvalue
свойством. Это свойство переопределяется, а не всеconst
2. Тип curVidType является реактивным, но что меняет значение? Он устанавливается инициализацией ref(route.params.videoTopic), но это означает, что объект curVidType имеет значение, заданное полем. route.params.videoTopic меняется, но curVidType-нет.
Ответ №3:
Было бы неплохо, если бы вы могли поделиться с нами еще каким-нибудь кодом, чтобы помочь вам. Это должно просто отлично работать
<template>
{{ curVidType }}
</template>
<script>
import { useRoute } from 'vue-router';
export default {
setup() {
const { params } = useRoute();
const curVidType = params.videoTopic
return {
curVidType,
};
},
};
</script>