【问题标题】:Vuex action cannot commit mutationVuex 动作不能提交突变
【发布时间】:2020-06-06 01:19:09
【问题描述】:

我正在为网站开发身份验证功能,我正在使用 Firebase 进行此操作。每当用户登录到 firebase 时,我在商店中的操作都会被触发并提交我的突变,因此状态会使用用户 ID 设置。不知何故,每当我尝试提交我的突变时,我都会不断收到错误消息: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;
}, 

【问题讨论】:

    标签: vue.js vuex nuxt.js store


    【解决方案1】:

    action的第一个参数是context,它有commitdispatch这样的功能。您可以使用 { dispatch } 作为参数来提取 (destructuring assignment) dispatch。您可以使用{ dispatch, commit } 来解决此问题,并将提交实际分配给局部变量。

    解构赋值

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

    使用上下文

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

    【讨论】:

    猜你喜欢
    • 2019-03-08
    • 2020-12-31
    • 2018-10-03
    • 2019-12-25
    • 2019-08-17
    • 2017-01-10
    • 2021-05-01
    • 2021-04-06
    相关资源
    最近更新 更多