如何将数据从vueJS传递到vuex

Nig*_*ker 1 javascript vue.js vuex

在这个例子中,我使用axios为我获取一些数据,然后我需要传递这些值并将其存储在Vuex中

带有axios请求的vue文件:

<script>
    export default {
        data: function () {
            return {
                userData: {},
                login: {
                    username: '',
                    password: '',
                },
            }
        },
        computed: {
            loggedInUser() {
                return this.$store.state.loggedInUser;
            }
        },
        methods: {
            handleLoginFormSubmit() {
                // send axios request to controller and from controller to gRPC
                axios.post('/loginUser', this.login)
                    .then((response) => {
                        this.userData = JSON.parse(response.data[0]);
                    })
                // set loggedInUser info to vuex store
                this.$store.dispatch('loginUser',this.userData);
            }
        },
    }
</script>
Run Code Online (Sandbox Code Playgroud)

当我检查userData对象是否存在我现在需要的所有信息时,我有store.js文件应该传递该userData并将其保存在Store但我总是得到空对象里面

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export const store = new Vuex.Store({
    state: {
        loggedInUser: {
            firstName: '',
            lastName: '',
            email: '',
            uuid: '',
        }
    },
    getters: {
        loggedUser(state){
            return state.loggedInUser;
        }
    },
    mutations: {
        loginUser: (state, payload) => {
            state.loggedInUser.firstName = payload;
            state.loggedInUser.lastName = 1;
            state.loggedInUser.email = 1;
            state.loggedInUser.uuid = 1;
        }
    },
    actions: {
        loginUser: (context, payload) => {
            setTimeout(function () {
                console.log(payload);
                context.commit('loginUser', payload)
            }, 3000)
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我的突变看起来像这样

键入: "loginUser"

payload:对象(空)

我哪里做错了什么?

Ber*_*ert 5

您在数据返回之前发送.将调度移动到回调中.

handleLoginFormSubmit() {
  // send axios request to controller and from controller to gRPC
  axios.post('/loginUser', this.login)
    .then((response) => {
      this.userData = JSON.parse(response.data[0]);
      this.$store.dispatch('loginUser',this.userData);
    })
}
Run Code Online (Sandbox Code Playgroud)