为什么我的调度不起作用?反应Redux

时间:2019-01-10 02:32:37

标签: javascript reactjs firebase redux firebase-authentication

我正在尝试使用redux存储更改Firebase用户名。

我有一个注册表单,用于接收输入的电子邮件,密码和用户名,然后该表单使用电子邮件和密码创建一个Firebase帐户,然后使用firebase的 updateProfile 更新displayName。看到这个

那是我的redux减速器:

case "CHANGE_USERNAME":
      const currentUser = firebase.auth().currentUser;

      currentUser.updateProfile({ displayName: state.user.displayName });

      return { ...state.user, displayName: action.payload };

这是商店:

const initialState = {
  logged: null,
  user: {}
};

这是我的注册表的一部分:

firebase
        .auth()
        .createUserWithEmailAndPassword(this.state.email, this.state.password)
        .then(() => {
          this.props.dispatch({
            type: "CHANGE_USERNAME",
            payload: { ...this.state.username }
          });

          alert("Account created!");
        })
        .catch(error => {
          // Handling errors
          var errorCode = error.code;
          var errorMessage = error.message;
          alert(errorCode);
        });

为什么用户名没有更改?

2 个答案:

答案 0 :(得分:0)

您没有从承诺中得到任何回报。假设createUserWithEmailAndPassword返回了一个Promise,并且响应中包含一个username字段,那么您想将response.username分发到化简器。

    .then((response) => {
      this.props.dispatch({
        type: "CHANGE_USERNAME",
        payload: { response.username }
      });

      alert("Account created!");
    })

在减速器中,您要添加新的username状态。像这样:

return { ...this.state, username: payload }

答案 1 :(得分:0)

谢谢,我已经使用以下方法解决了该问题:

case "CHANGE_USERNAME": {
      const currentUser = firebase.auth().currentUser;

      currentUser.updateProfile({ displayName: action.payload });

      return {
        ...state,
        user: { ...currentUser.providerData[0] }
      };
    }

在我的减速器上:

this.props.dispatch({
      type: "CHANGE_USERNAME",
      payload: this.state.displayName
    });

在我的调度中,谢谢!