Действие Vuex не может совершить мутацию - PullRequest
0 голосов
/ 21 февраля 2020

Я работаю над функцией аутентификации для веб-сайта, я делаю это с Firebase. Всякий раз, когда пользователь входит в firebase, мои действия в моем магазине запускаются и фиксируют мою мутацию, поэтому состояние устанавливается с помощью userID. Почему-то всякий раз, когда я пытаюсь зафиксировать свою мутацию, я получаю сообщение об ошибке: commit is not defined. Кажется, я не могу найти решение этой проблемы, все форумы, на которых я был, не помогли, поэтому я действительно надеюсь, что кто-то здесь сможет помочь мне с моей проблемой, я был бы очень признателен.

Мои действия :

  async login({ dispatch }, user) {
    const token = await auth.currentUser.getIdToken(true);
    const idTokenResult = await auth.currentUser.getIdTokenResult();

    let approved = false;
    const userData = await firestore.collection('users').doc(user.email).get();
    if (userData) {
      approved = userData.data().isApproved
    }

    const userInfo = {
      name: user.displayname || null,
      email: user.email || null,
      avatar: user.photoURL || null,
      uid: user.uid,
      approved
    };
    Cookies.set('access_token', token); // saving token in cookie for server rendering
    commit('saveUID', userInfo.uid);
  }
};

Моя мутация:

saveUID (state, uid) {
    state.uid = uid;
}, 

1 Ответ

3 голосов
/ 21 февраля 2020

Первым параметром действия является context, который имеет такие функции, как commit и dispatch. Вы извлекаете ( деструктурирующее назначение ) dispatch, используя { dispatch } в качестве параметра. Вы можете использовать { dispatch, commit }, чтобы исправить это и фактически назначить коммит локальной переменной.

деструктурирующее назначение

async login({ dispatch, commit }, user) {
  commit('your_mutation')
}

с использованием контекста

async login(context, user) {
  context.commit('your_mutation')
}
...