【问题标题】:State won't completely mutate状态不会完全改变
【发布时间】:2020-04-16 07:01:42
【问题描述】:

我有这个登录系统。当用户登录时,我的操作将我的状态设置为数据(用户名、电子邮件和用户 ID)我从 firebase 身份验证中检索并存储在一个名为 newUser 的变量中,因此我可以访问它并在 @987654322 上显示其中的一些@。根据我vuex action 中的控制台日志,信息存储在变量中就好了。但是,当我在应该显示数据的文件中控制台记录数据时,某些数据没有通过。 userIdemail 通过就好了,但 username 通过 undefined。什么会导致这个问题,我该如何解决这个问题?

这是我处理数据的代码:

  state: {
    user: null
  },

  mutations: {
    setUser(state, payload) {
      state.user = payload;
  },
    userLogin({ commit }, payload) {
      commit("setLoading", true);
      commit("clearError");

      firebase
        .auth()
        .signInWithEmailAndPassword(payload.email, payload.password)
        .then(user => {
          commit("setLoading", false);

          const signedInUser = {
            email: payload.email,
            id: user.user.uid,
            username: user.user.displayName
          };

          console.log(signedInUser);
          commit("setUser", signedInUser);
        })
        .catch(err => {
          commit("setLoading", false);
          commit("setError", err);
        });
    },

  getters: {
    user(state) {
      return state.user;
    }
  }

这就是我尝试访问数据以检查它并将其显示在DOM上的方式:

  created() {
    console.log(this.$store.getters.user);
  },

  computed: {
    username() {
      return this.$store.getters.user.username;
  },

我试图将我的用户设置为一个空数组、一个空对象,以及一个带有我想要存储的数据的对象,这意味着:

user: {
    username: null,
    email: null,
    id: null
}

同样,这些方法都不起作用。

非常感谢任何帮助。提前谢谢你。

【问题讨论】:

  • 试试Vue.set(state, 'user', payload)
  • 使用 Vue 开发工具代替控制台日志。您可以实时查看商店并实时查看所有操作和变化,因此您可以准确确定问题发生在流程的哪个部分。
  • 您可以使用 console.log( JSON.stringify(user)); 检查用户的内容,这将允许您查看变量的正确名称以及它是否到达您的客户端

标签: firebase vue.js google-cloud-firestore vuex


【解决方案1】:

应该是this.$store.getters.user.username 而不是this.$store.getters.username

  computed: {
    username() {
      const user = this.$store.getters.user
      if (user) {
         return user.username
      }
    }
  },

【讨论】:

  • 感谢您的回答,但它仍然未定义。这很奇怪,因为如果我将用户名更改为 id 或电子邮件,这些都可以通过。
  • 我给它加了守卫if (user),你能试试吗?你能显示console.log(signedInUser);的结果吗?
  • 我尝试按照您的建议添加警卫,但也没有用。
  • 当我 console.log signedInUser 时,我得到:{email: "www@www.com", id: "kJxuEAJmb8atOMRvw2bYF1sXc8t2", username: "www"}。但是当我 console.log this.$store.getters.user 时,我得到:id: "kJxuEAJmb8atOMRvw2bYF1sXc8t2" email: "www@www.com" username: undefined
  • 登录时会得到什么:user.username
猜你喜欢
  • 2019-11-15
  • 2019-01-30
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 2019-03-27
  • 2018-07-17
相关资源
最近更新 更多