【问题标题】:Get undefined of response.data from axios that stored in vuex从存储在 vuex 中的 axios 获取未定义的 response.data
【发布时间】:2020-01-29 03:36:03
【问题描述】:

在 vue 组件中获取未定义的 response.data console.log(this.$store.getters.getData)

但是,我可以使用这个语句console.log(resp.data) 得到 response.data

我在成功突变中尝试了console.log(data),但它仍然返回未定义。

登录.vue

    login: function() {
        let data = this.$store
          .dispatch("login", data)
          .then((resp) => {
            console.log(resp.data);  -> it returned data
            console.log(this.$store.getters.getData);  -> it returned undefined

            }
          })
          .catch(err => {});
      }

store.js

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'
import qs from 'qs'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    status: '',
    token: localStorage.getItem('token') || '',
    data: {},
  },
  mutations: {
    success(state, token, data) {
      state.status = 'success'
      state.token = token
      Vue.set(state, 'data', data)
    }
  },
  actions: {
    login({ commit }, data) {
      return new Promise((resolve, reject) => {
        axios.post(url, qs.stringify(data))
          .then(resp => {
            commit('success', resp.data.token, resp.data)
            resolve(resp)
          })
          .catch((error) => {
            commit('error')
            reject(error)
          })
      })
    },
  getters: {
    getData: state => state.data,
  }
})

console.log(resp.data); -> it returned data console.log(this.$store.getters.getData); -> it returned undefined

【问题讨论】:

  • 我不确定,但我认为你需要先.then((r)=> {return r.data}).then(()=>{console.log(this.$store.getters.getData)})
  • 同理,我又undefined了,我认为是mutation问题,提交数据后会变成undefined。

标签: vue.js axios vuex


【解决方案1】:

尝试突变成功代替 Vue.set(state,'data',data) write state.data = data;

【讨论】:

  • 对不起,您可以再查看一下代码,因为我错过了刚刚复制几行代码的操作,所以我已经编辑了代码。以及 Vue.set(state,'data',data) 和 state.data = data; 的结果是一样的 - 未定义。
  • 好吧,我正在检查你的代码。当然,在突变成功中你有 2 个参数(token,data),但在行动中你用 1 个参数调用 commit('success',data),因为在突变中你有 token = data, data = undefined。跨度>
  • 但在我将令牌数据添加为 commit('success', token,data) 后,它仍然返回未定义的数据,但状态和令牌具有价值。
  • 你在 dispatch event 时传入 login 函数的数据是什么?
  • 我的参数查询字符串。
【解决方案2】:

终于搞明白了为什么返回undefined,因为mutation只接受state和payload这2个参数,所以其他参数都不会传递。

参考 - Can't send in a second parameter to the mutation in Vue store

【讨论】:

    猜你喜欢
    • 2020-07-13
    • 2021-10-03
    • 2019-09-09
    • 2019-03-31
    • 1970-01-01
    • 2021-07-25
    • 2019-03-21
    • 2020-01-17
    • 1970-01-01
    相关资源
    最近更新 更多