首先,有 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 isLogin
ina.vue
发生了变化,但v-if
in<a>
却无法反应,因为in<a>
没有出现。
我试过测试是否store
被注入到子组件中,结果是它通过了。另外,我尝试使用computed
而不是getters
to listen isLogin
,它也没有反应。添加属性时isLogin
,watch
无法观看。
还有一件事我很确定——Vue.use(Vuex)
没有错过。
我想知道是否是Vue-router
导致问题的原因。
似乎没有人问过关于vuex
...vue-router
的问题