dispatchin操作后的导航redux与react native



在调度登录操作后,我尝试引入带有redux的身份验证反应本地应用程序。登录屏幕中的代码:

const dispatch = useDispatch();
const auth = useSelector(state => state.authentication);
const onSubmit = (data: {email: string; password: string}) => {
dispatch(loginUser(data));
auth.isAuth && navigation.navigate('Home');
};
登录操作代码为:

export const loginUser = data => async dispatch => {
try {
const res = await axios({
method: 'post',
url: `${API_URl}/auth/login`,
data,
});
dispatch({type: LOGIN_SUCCESS, payload: res.data});    
} catch (error) {
dispatch({type: GET_ERRORS, payload: error.response.data});
dispatch({type: LOGIN_FAILED, payload: error.response.data});
}
};
减速器代码如上:

case LOGIN_SUCCESS:
case REGISTER_SUCCESS:
return {
...state,
user: payload.user,
isAuth: true,
message: null,
};

我想导航到另一个屏幕"主页",但这不是调度登录操作后的第一次,尽管我已经验证了状态已更改:按下登录按钮后,在控制台上输入图像描述

您正在调用onSubmit,它调用loginUser。然而,在loginUser,您有一个异步的API调用,这意味着在您调用loginUser之后,auth.isAuth将始终为false。

您需要确保登录屏幕的componentDidMount上有auth.isAuth === true,或者使用类似redux-observable的东西来对正在调度的操作做出反应并执行导航。

相关内容

  • 没有找到相关文章

最新更新