在调度登录操作后,我尝试引入带有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
的东西来对正在调度的操作做出反应并执行导航。