首先,有 user.js,这是用于的模块之一store.js
const state = {
isLogin: false
}
const mutations = {
login(state, userid){
state.userid = userid;
}
}
export default {
state,
mutations
}
使用 Vue-router,我创建了一个 App 组件,并导入了store.js.
然后是 Component login.vue。以下是部分代码:
<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>
我注意到该方法btnClick可以在这个组件中工作。它确实改变了store.state.user.isLogin.
但这是另一个a.vue监听isLogin状态的组件:
<template>
...
<a
v-if="isLogin"
v-link="'#'">
...
</a>
...
</template>
<script>
// import something
export default {
vuex: {
getters: {
isLogin: ({ user }) => user.isLogin
}
}
}
</script>
当btnClick切换到 时login.vue,isLogin改变了。但似乎虽然 getter isLoginina.vue发生了变化,但v-ifin<a>却无法反应,因为in<a>没有出现。
我试过测试是否store被注入到子组件中,结果是它通过了。另外,我尝试使用computed而不是gettersto listen isLogin,它也没有反应。添加属性时isLogin,watch无法观看。
还有一件事我很确定——Vue.use(Vuex)没有错过。
我想知道是否是Vue-router导致问题的原因。
似乎没有人问过关于vuex...vue-router的问题