#vue.js #vuex #vuejs3 #vuex4
Вопрос:
Я пытаюсь извлечь избранное пользователя с помощью axios, когда пользователь входит в систему. Для этого я использую Vuejs с Vuex. Все о процессе ведения журнала в порядке, но что касается избранного, я что-то упускаю, но не знаю что.
Моя store.ts
такая, как эта :
export const store = createStore({
state: {
user: null,
token: null,
favorites: []
},
mutations: {
setUser(state, user) {
state.user = user;
},
setToken(state, token) {
state.token = token;
},
setFavs(state, favorites) {
state.favorites = favorites;
},
},
actions: {
getFavorites({ commit }) {
axios
.post("URL_HERE", {
userId: this.state.user,
})
.then((res) => {
//console.log(res);
commit('setFavs', res.data)
})
.catch((error) => {
console.log(error);
})
}
},
getters: {
getFavs: (state) => state.favorites
},
});
На моем компоненте «Избранное» у меня есть :
export default defineComponent({
name: "Favorites",
data() {
return {
favorites: null,
};
},
computed: {
...mapGetters(["isLoggedIn"]),
...mapGetters({ Favorites: "getFavs" }),
},
});
Затем в шаблоне :
<div v-for="favorite in Favorites" :key="favorite.event_id">
<li>{{ favorite }}</li>
</div>
Ответ №1:
Вам нужно отправить действие в установленный крюк:
export default defineComponent({
name: "Favorites",
data() {
return {
favorites: null,
};
},
computed: {
...mapGetters(["isLoggedIn"]),
...mapGetters({ Favorites: "getFavs" }),
},
methods:{
...mapActions(['getFavorites'])//map the actions as you did with getters
},
mounted(){
this.getFavorites();//dispatch the action
},
//or use a watcher
watch:{
isLoggedIn(newVal,oldVal){
if(newVal){
this.getFavorites()
}
}
}
});
Комментарии:
1. О, хорошо, теперь я все понял ! Как динамически прослушивать его вместо «смонтированного» крючка ?
2. вы могли бы отправить его с помощью такого события, как
@click="getFavorites"
3. Когда я вхожу в систему, я использую мутацию для хранения идентификатора пользователя. Мне нужно извлекать избранное только в том случае, если оно установлено
4. вы могли бы использовать наблюдателя, как я уже упоминал в своем отредактированном ответе
5. Так же просто.. ну, я думаю, мне нужно узнать больше о доступе к данным, спасибо, чувак !