调度另一个动作/在减速器中调用另一个减速器

时间:2020-09-27 14:11:26

标签: reactjs redux

我在Redux上使用React,遇到了一种情况,我希望我的一个reducer调度另一个动作,但是不确定如何执行。

我使用createSlice函数创建了一个切片,用于身份验证,一个切片用于模式。我想从身份验证切片的hideModal简化程序中调用login操作,以在提交后完全隐藏登录模式。

我不能立即调用dispatch(login())紧跟着dispatch(hideModal())的原因是,我需要首先确定表单数据中是否有任何错误,这些错误只能在{{1 }}减速器,因为[login.fulfilled]是使用login创建的异步thunk。

我了解这在React中有点反面,所以想知道实现此目标的最佳方法是什么吗?

到目前为止,我唯一的解决方案是让createAsyncThunk监听modalSlice作为其login.fulfilled对象的一部分。但这很混乱。

任何帮助将不胜感激,如果这个问题不够清楚,请让我知道,我将尽力澄清。谢谢

身份验证切片

extraReducers

模态切片

export const authSlice = createSlice({
    name: "auth",
    initialState: {
        loggedIn: false,
        userId: null,
        errors: []
    },
    extraReducers: {
        [login.fulfilled]: (state, action) => {
            if (action.payload.success) {
                state.loggedIn = true;
                state.userId = action.payload.userId;
                state.errors = [];
            } else {
                state.errors = action.payload.errors;
            }
        },
// Omitting rest of slice

1 个答案:

答案 0 :(得分:0)

我不能立即调用dispatch(login())紧跟在dispatch(hideModal())上的原因是,我需要首先找出表单数据中是否有任何错误,这只能在登录内部知道减速器。

在下一次发货之前,您是否无法检查任何错误?您可以访问组件内部的redux存储

dispatch(authLogin);
if (this.state.auth.errors) { // or however you are connecting to your store
  // do error handling stuff
} else {
 dispatch(closeModal);
}