Vue.js 使用vue路由器时Vuex Getter属性失败-它们无法响应

Vue.js 使用vue路由器时Vuex Getter属性失败-它们无法响应,vue.js,vue-router,Vue.js,Vue Router,首先是user.js,它是store.js const state = { isLogin: false } const mutations = { login(state, userid){ state.userid = userid; } } export default { state, mutations } 使用Vue路由器,我创建了一个应用程序组件,并导入了store.js 然后是组件login.vue。以下是代码的一部分: <script&g

首先是
user.js
,它是
store.js

const state = {
  isLogin: false
}

const mutations = {
  login(state, userid){
    state.userid = userid;
  }
}

export default {
  state,
  mutations
}
使用Vue路由器,我创建了一个应用程序组件,并导入了
store.js

然后是组件
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>
b单击
login.vue
中切换时,
isLogin
更改。但是看起来,虽然
a.vue
中的getter
isLogin
已更改,但是
中的
v-if
无法反应,因为
没有出现

我试着测试
store
是否被注入子组件,结果是它已经通过。另外,我尝试使用
computed
而不是
getters
来侦听
isLogin
,但也没有反应。在
watch
属性中添加
isLogin
时,它无法监视

有一件事我非常确定,
Vue.use(Vuex)
不会错过

我想知道是否是
Vue路由器
导致了问题。

而且似乎没有人问过关于
vuex
vue路由器的问题

我正在使用
vuex
vue路由器
vue资源
(如果您正在验证用户,我假设您正在发出HTTP请求),它工作正常

我认为你的问题在于你的getter宣言。getter在
存储
对象内接收
状态
,在存储声明中,我看不到
isLogin
选项是
用户
的属性。我会把你的getter换成这个

vuex: {
  getters: {
    isLogin: state => state.isLogin
  }
}

您是否在任何地方更新isLogin?通过在名为
userid
state
上设置一个不存在的属性,而不是在任何地方设置
state.isLogin,可以登录用户。我不知道设置未声明的属性是否有效,而且通常在Vue中,必须从一开始就声明一个变量才能响应。应该是这样的:

const state = {
  isLogin: false,
  userid:0
}

const mutations = {
  login(state, userid){
    state.userid = userid;
    state.isLogin = true;
  }
}

正如杰夫所说,对于我的问题,我也制作了一个模块,所以我们必须这样制作

state.user.isLogin

我认为,当您进行模块化Vuex构建时,正如他在这里所做的那样,模块本身将成为
状态的属性。因此,由于它是一个名为
user
的模块,因此它确实成为了state的属性,
isLogin
属性将位于
state.user.isLogin
。这只是我愚蠢的错误。现在它工作了!谢谢,谢谢你的回答。到目前为止,我已经解决了这个问题。正如你所看到的,我只是犯了一个愚蠢的错误。
const state = {
  isLogin: false,
  userid:0
}

const mutations = {
  login(state, userid){
    state.userid = userid;
    state.isLogin = true;
  }
}