Uncaught (в обещании) ReferenceError: отправка не определена - PullRequest
0 голосов
/ 07 января 2020

Я использую vuex и у меня есть индекс. js и auth. js в папке магазина. Я хочу, чтобы при входе в систему выполнялась базовая операция входа в систему c. vue с вызовом действия из хранилища, но я получил эту ошибку 'Uncaught (в обещании) ReferenceError: диспетчер не определен', пока я вызываю действие из другого действия с диспетчеризацией введите авторизацию. js.

index. js

import Vue from 'vue'
import Vuex from 'vuex'
import auth from './auth'

Vue.use(Vuex);

export default new Vuex.Store({
    state: {},
    mutations: {},
    actions: {},
    modules: {
        auth
    }
})

auth. js

import axios from "axios";

export default {
    namespaced: true,
    state: {
        token: null,
        user: null
    },
    mutations: {
        SET_TOKEN(state, token) {
            state.token = token;
        },
        SET_USER(state, data) {
            state.user = data;
        }
    },
    actions: {
        async signIn(_, credentials) {
            let response = await axios.post("auth/signin", credentials)
            /* eslint-disable */
            dispatch('attempt', response.data.token);
        },
        async attempt({commit}, token) {
            commit("SET_TOKEN", token);

            try {
                let response = await axios.get('auth/me', {
                    headers: {
                        'Authorization': 'Bearer ' + token
                    }
                });
                commit("SET_USER", response.data)
            } catch (e) {
                commit("SET_TOKEN", null);
                commit("SET_USER", null);
            }
        }
    }
}

Вход. vue

<template>
    <div>
        <form @submit.prevent="submit">
            <div>
                <label for="email">Email</label>
                <input id="email" type="email" name="email" v-model="form.email">
            </div>
            <div>
                <label for="password">Password</label>
                <input id="password" type="password" name="password" v-model="form.password">
            </div>
            <div>
                <button type="submit">Submit</button>
            </div>
        </form>
    </div>
</template>

<script>
    import {mapActions} from "vuex";

    export default {
        name: "signIn",
        data() {
            return {
                form: {
                    email: "",
                    password: ""
                }
            }
        },
        methods: {
            ...mapActions({
                signIn: 'auth/signIn'
            }),
            submit() {
                this.signIn(this.form)
            }
        }
    }
</script>

1 Ответ

0 голосов
/ 07 января 2020

asyn c попытка ({commit}, token), подобная этой, вы должны выполнить диспетчеризацию записи {dispatch} в функции asyn c signIn (). т.е. async attempt({dispatch}, token)

Я думаю, что это может работать! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...