У меня есть форма входа, в которой я хочу обрабатывать функцию отправки и обновления через redux.
Login.js:
const Login = (props) => {
const dispatch = useDispatch();
const isUserExists = useSelector((state) => state.auth.isUserExists);
const handleSubmitForm = (vals) => {
dispatch(isUserExistsByPhoneNumber("Login", vals)).then(() =>
props.navigation.navigate(isUserExists ? "VerifyAuth" : "Signup", {
vals: vals,
sentFrom: "Login",
})
);
};
LoginForm.js:
const LoginForm = (props) => {
const handleFormSubmit = () => {
props.submitForm(values);
};
const [values, handleChange, handleSubmit] = useForm(handleFormSubmit);
return (
<View>
<Input
name="phoneNumber"
value={values.phoneNumber || ""}
onChange={(name, value) => handleChange(name, value)}
label="Phone Number"
keyboardType="number-pad"
/>
<Button
mode="outlined"
onPress={handleSubmit}
loading={props.submitting}
disabled={props.submitting}>
Login
</Button>
</View>
);
};
AuthActions.js:
export const isUserExistsByPhoneNumber = (sentFrom, phoneNumber) => {
return (dispatch) => {
dispatch({ type: authTypes.GET_IS_USER_EXISTS_REQUEST });
return authService
.checkIfUserExists(sentFrom, phoneNumber)
.then((response) => {
dispatch({ type: authTypes.GET_IS_USER_EXISTS_SUCCESS });
dispatch(setIsUserExists(response));
})
.catch((errors) => {
dispatch({ type: authTypes.GET_IS_USER_EXISTS_ERROR, payload: errors });
});
};
};
Код не работает, просто потому, что ".then" после отправки на Login.js
не ожидает отправки на fini sh, прежде чем продолжить.
Как я могу это исправить и прочитать данные isUserExists только после завершения отправки?
Если я сделаю это с помощью useEffect, мне нужно будет создать опору isDoneDispatching и перемещаться только тогда, когда это обновления опоры?
Спасибо.