使用vuex,在请求数据时提示" Cannot read property 'dispatch' of undefined"

发布于 2022-09-06 11:14:41 字数 2012 浏览 16 评论 0

刚学习vuex,今天在写登录注册时,使用了vuex保存了登录成功时,服务端返回的数据,但是在axios请求时,却提示“TypeError: Cannot read property 'dispatch' of undefined”
代码如下:
state.js:

const state = {
  userInfo: {
    avatar: '', // 登录头像
    nickname: '', // 登录昵称
    signature: '', // 个性签名
    userId: '', // 用户Id
    token: '' // token
  }
}

getters.js

export const getUserInfo = state => state.userInfo

mutation-types.js

export const SET_USERINFO = 'SET_USERINFO'

mutations.js

const mutations = {
  [types.SET_USERINFO] (state, user) {
    state.userInfo = user
  }
}

actions.js

setUserInfo ({commit}, user) {
    window.window.sessionStorage.user = JSON.stringify(user)
    commit(types.SET_USERINFO, user)
}

methods: {

...mapActions({
  setUserInfo: 'setUserInfo'
}),
onLogin () {
  if (this.loginstate.$invalid === false) {
    var datas = '&mobile=' + this.phonenumber + '&password=' + this.password
    this.$axios.post('/api/Auth/Login', datas, {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    }).then(res => {
      let user = {
        avatar: res.data.data.avatar,
        nickname: res.data.data.nickname,
        signature: res.data.data.signature,
        token: res.data.data.token,
        userId: res.data.data.user_id
      }
      this.setUserInfo(user) // 加上这行代码,就会在catch中提示我‘TypeError: Cannot read property 'dispatch' of undefined’,但是正常数据又是能够请求到的,请问是哪里出了问题?
      console.log(this.setUserInfo(user))
      if (res.data.code != 0) {
        Toast({
          message: res.data.data.msg,
          position: 'bottom'
        })
      } else {
        this.$router.push('/home')
      }
    })
    .catch(err => console.log(err)) 
  }
}

}

运行结果:

![clipboard.png](/img/bV1988)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空心空情空意 2022-09-13 11:14:41

action.js里是怎样的,

const actions=[
setUserInfo ({commit}, user) {
    window.window.sessionStorage.user = JSON.stringify(user)
    commit(types.SET_USERINFO, user)
}]

这样的吗?
然后Vue.use(Vuex)调用了吗

掀纱窥君容 2022-09-13 11:14:41

找到原因了,是因为我没有在main.js中引用配置好vuex

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文