отправил почтовый запрос в действиях и зафиксировал изменение данных с помощью vuex - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь установить для boolean значение true после отправки нового пользователя с vuex, но получаю странную ошибку Uncaught (in promise) TypeError: Cannot read property 'data' of undefined

это метод создания в actions state

        async CREATE_USER({state}) {
                await axios.post('api/user', state.user)
                        commit('SET_CREATED_USER');
        },

это мутация

 SET_CREATED_USER: (state) => {
            state.newUserCreated = true;
            console.log('user create? -> ', state.newUserCreated);
        }

и метод отправки

onSubmit() {
              this.$store
                  .dispatch('CREATE_USER')
                  .then(() => {
                      this.inProgress = false;
                      // navigate to user
                      this.$router.push('users');
                  })
                  .catch( ({ response }) => {
                      this.inProgress = false;
                      this.errors = response.data.errors;
                      console.log('you have an error on creating an user')
                    });
            },

Я пытался добавить .then к методу CREATE_USER

axios.post('api/user', state.user).then(
() => commit('SET_CREATED_USER');
)

получил ту же ошибку, что и я

async CREATE_USER({state}, context) {
                await axios.post('api/user', state.user)
                        context.commit('SET_CREATED_USER');
        },

Я также пытался удалить async и получаю сообщение об ошибке

Uncaught (in promise) ReferenceError: commit is not defined

1 Ответ

0 голосов
/ 11 июля 2020

Две проблемы:

  1. Вы пытаетесь использовать commit в своем действии без доступа к нему
async CREATE_USER({ state, commit }) {
    await axios.post('api/user', state.user)
    commit('SET_CREATED_USER');
},
Вы пытаетесь получить доступ к response.data.errors, но response является ключом, допускающим значение NULL, поэтому выдает ошибку. Вероятно, вы можете просто использовать необязательную цепочку, чтобы справиться с этим.
.catch((error) => {
    this.inProgress = false;
    this.errors = error?.response?.data?.errors
    console.log('you have an error on creating an user')
});
...