【问题标题】:Thunks in React-Redux - Not Resolving?React-Redux 中的 Thunks - 没有解决?
【发布时间】:2024-04-11 08:20:02
【问题描述】:

我正在使用 React 和 Redux 通过 Google Firebase 创建登录系统。我试图了解如何使用 thunk。我从我的 React 组件调用我的操作 createUser 但是,我无法成功处理回调。

这是我从中调用操作的组件函数:

registerUser() {
    let email = this.state.user.email;
    let pw= this.state.user.password;

    this.props.actions.createUser(email, pw)
        .then((user) => {
            debugger; // The async request is successful but execution doesn't pause here
        })
        .catch((error) => {
            debugger; // Instead I receive an error here that says, "Uncaught (in promise) RangeError: Maximum call stack size exceeded"
        });
}

以下是操作:

export function createUserSuccess(user) {
    debugger;
    return { type: types.CREATE_USER_SUCCESS, payload: { registeredUser: user, registerMsg: 'Successful Registration!'  }};
}

export function createUserError(error) {
    return { type: types.CREATE_USER_ERROR, payload: { registeredUser: {}, registerMsg: error.message }};
}


export function createUser(email, pw) { // async thunk
    debugger;
    return (dispatch) => {
        debugger;
        return firebase.auth().createUserWithEmailAndPassword(email, pw)
            .then((user) => {dispatch(createUserSuccess(user))}) // todo: figure out why this won't resolve
            .catch(error => dispatch(createUserError(error)));
    }
}

还有我的减速机:

import * as types from '../actions/actionTypes';
import initialState from './initialState';

export default function registerReducer(state = initialState.registeredUser, action) {
debugger;
switch (action.type) {
    case types.CREATE_USER_SUCCESS:
        return [
            ...state, // es6 spread operator - explodes all values in array
            Object.assign({}, action.payload)
        ];

    case types.CREATE_USER_ERROR:
        return [
            ...state,
            Object.assign({}, action.payload)
        ];

    default:
        return state;
  }

}

我知道对 Google firebase 的实际请求是可以的,因为 createUserSuccess 动作创建者被解雇了。为什么执行没有在我的 React 组件中的适当位置停止?

【问题讨论】:

  • 你能在这里更新你的容器吗?
  • 如果在调用 createUserSuccess(user) 之后在 catch 回调中捕获到错误,则该函数或您的 reducer 中可能存在引发异常的内容。你能分享你的reducer代码吗?
  • @NikolajDamLarsen 我也这么认为,但我找不到我的减速器代码有什么问题。我在上面加了。
  • 是的,我也没有发现任何问题。我相信这是故意的,您的状态是数组而不是对象?错误被捕获时会说什么?

标签: reactjs redux react-redux redux-thunk


【解决方案1】:

你可以在这里查看这个实现

最重要的部分是authService,有任何问题都可以告诉我

【讨论】: