0

我的 nuxt 状态有以下代码块。

export const mutations = {
  logout () {
    localStorage.removeItem('userToken')
    localStorage.removeItem('expiryDate')
    localStorage.removeItem('userId')
    this.state.userId = null
    this.state.token = null
    this.state.authenticated = false
  },

  autoLogout ({dispatch},milliseconds) {
    setTimeout(() => {
      dispatch.logout()
    }, milliseconds)
  }
}

使用上面的代码,我收到dispatch is not a function的错误消息。如何调用logout()fromautologout()方法

4

1 回答 1

2

dispatch ”语法属于Vuex 中的动作,而不是突变要调用另一个突变,您需要对突变使用“提交” 。

您还需要使用字符串参数调用调度和提交函数,作为要调用的操作或突变的名称,例如

commit('logout')或者dispatch('fetchUserInfo')

当涉及到您的主要问题时,在突变中提交另一个突变是违反 Vuex 实践的,实际上是不可能的。

Vuex 突变可以采用两个参数,state并且payload. commit不是其中之一。

这些类型的异步函数应该列在操作下,特别是如果您实际上要使用 API 调用或任何类型的 HTTP 请求而不是 setTimeOut 函数。在您的情况下,我会将 autoLogout 突变重写为如下操作:

  autoLogout ({commit}, milliseconds) {
    setTimeout(() => {
      commit('logout')
    }, milliseconds)
  }

祝你好运!

于 2020-09-30T09:30:04.483 回答