【发布时间】:2021-08-10 09:54:36
【问题描述】:
我正在开发一个 React Native 应用程序。我有一个注册屏幕,上面有一个按钮,onclick:
const handleClick = (country: string, number: string): void => {
dispatch(registerUser({ country, number }))
.then(function (response) {
console.log("here", response);
navigation.navigate(AuthRoutes.Confirm);
})
.catch(function (e) {
console.log('rejected', e);
});
};
registerUser 函数:
export const registerUser = createAsyncThunk(
'user/register',
async ({ country, number }: loginDataType, { rejectWithValue }) => {
try {
const response = await bdzApi.post('/register', { country, number });
return response.data;
} catch (err) {
console.log(err);
return rejectWithValue(err.message);
}
},
);
我有一个确实被调用的extraReducers,证明它被有效地拒绝了。
.addCase(registerUser.rejected, (state, {meta,payload,error }) => {
state.loginState = 'denied';
console.log(`nope : ${JSON.stringify(payload)}`);
})
但是注册组件得到正常处理,在“这里”记录并导航到确认屏幕。这是为什么呢?
【问题讨论】:
-
你能显示
rejectWithValue吗?您可能需要抛出错误而不是返回它。 -
@Yousaf 好吧,它在 thunkAPI 的 args 中被解构,如您所见
{ rejectWithValue }- 这是 redux 工具包中的一个函数。 redux-toolkit.js.org/api/createAsyncThunk#payloadcreator -
我不知道 redux-toolkit 但我的猜测是 returning 来自
catch块的值是包装函数返回的 implicitly fulfilling the promise。跨度> -
你完全正确。如果我只是停止返回并只写
rejectWithValue(err.message);,则错误会在组件中捕获。有趣的是,行为不端的是减速器 - 它调用了registerUser.fulfilled减速器,而不是在我返回东西时实际调用的registerUser.rejected!
标签: reactjs react-native redux react-redux redux-thunk