Po pierwsze, nie jest user.js
, który jest jednym z modułów do store.js
Vuex pobierające-properties Niepowodzenie przy stosowaniu vue routerem - nie udało się reaktywny
const state = {
isLogin: false
}
const mutations = {
login(state, userid){
state.userid = userid;
}
}
export default {
state,
mutations
}
Stosując Vue routerem, utworzonego składnik aplikacji i zaimportowane store.js
.
Następnie pojawia się komponent login.vue
. Oto część z kodów:
<script>
export default {
vuex: {
actions: {
login // this action changes the state of
// isLogin by dispatch `login` mutation
}
},
methods: {
btnClick(){
// here calls the login action
}
}
}
</script>
Zauważyłem, że metoda btnClick
może pracować w ten składnik. Zmieniło to store.state.user.isLogin
.
Ale tu jest inny składnik a.vue
słuchanie stan isLogin
:
<template>
...
<a
v-if="isLogin"
v-link="'#'">
...
</a>
...
</template>
<script>
// import something
export default {
vuex: {
getters: {
isLogin: ({ user }) => user.isLogin
}
}
}
</script>
Kiedy btnClick
przełączana w login.vue
The isLogin
zmieniło. Wygląda jednak na to, że chociaż zmienił się getter isLogin
w, to v-if
w <a>
nie może być reaktywny, ponieważ <a>
nie pojawiło się.
Próbowałem sprawdzić, czy store
jest wstrzykiwany do komponentów potomnych, a wynikiem jest, że minął. Ponadto próbowałem użyć computed
zamiast getters
do odsłuchania isLogin
, a także nie było ono reaktywne. podczas dodawania atrybutów isLogin
w nie udało się obejrzeć.
I jest jedna rzecz, którą jestem całkiem pewny - Vue.use(Vuex)
nie jest pominięty.
Zastanawiam się, czy to jest Vue-router
, który spowodował problem.
I wydaje się, że nikt nie zadawane pytania o vuex
z vue-router
...
Myślę, że kiedy robisz modułową Vuex build, jak on dokonał tutaj, sam moduł staje się własnością na 'stanie'. Ponieważ był to moduł o nazwie 'user', stał się on właściwością stanu, a własność' isLogin' miałaby postać 'state.user.isLogin' – Jeff
Rozumiem. To tylko mój głupi błąd. Teraz działa! Dziękuję Ci. –