Nawigacja po wysłaniu do działania redux za pomocą react native

0

Pytanie

Staram się wdrożyć własną aplikację do uwierzytelniania react z pomocą redux po wysłaniu czynności logowania.Kod na ekranie logowania:

const dispatch = useDispatch();
const auth = useSelector(state => state.authentication);

const onSubmit = (data: {email: string; password: string}) => {
  dispatch(loginUser(data));
  auth.isAuth && navigation.navigate('Home');
};
Kod do logowania to :

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});
  }
};
Kod przekładni przedstawiono powyżej:

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

Chcę przejść do innego ekranu "do Domu", ale to odbywa się nie po raz pierwszy po wysłaniu czynności logowania, chociaż sprawdziłem, że stan się zmienił : wprowadź opis obrazu w konsoli po naciśnięciu przycisku logowania

1

Najlepsza odpowiedź

0

Dzwonisz onSubmit, co powoduje, że loginUser. W loginUser tym nie mniej, masz wywołanie interfejsu API, który jest asynchroniczny, co oznacza, że natychmiast po wywołaniu loginUser, auth.isAuth zawsze będzie fałszywy.

Musisz upewnić się, że auth.isAuth === true na componentDidMount ekranu logowania lub użyj coś takiego redux-observable aby reagować na wysyłane działania i nawigacja.

2021-11-24 01:04:12

Staram się korzystać z uwierzytelniania i nawigację wewnątrz useEffect z tablicą zależności, ale problem nadal pozostaje.
smichi

Zobacz, co mówią dokumenty react-nawigacji o strumieniach uwierzytelniania: reactnavigation.org/docs/auth-flow
romin21

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................