我在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
答案 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);
}