Navigace po dispatchin akce redux s reagovat native

0

Otázka

Snažím se zavést ověřování reagovat nativní aplikace s redux, po odeslání akce přihlášení.Kód na Přihlašovací Obrazovce:

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

const onSubmit = (data: {email: string; password: string}) => {
  dispatch(loginUser(data));
  auth.isAuth && navigation.navigate('Home');
};
Kód akce přihlášení je :

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});
  }
};
Kód pro reduktor je výše:

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

Chci přejít na jinou obrazovku "Home", ale toto není provedeno poprvé po vyslání přihlášení akce, i když mám ověřeno, že stát je změněno : zadejte popis obrázku konzole poté stiskněte tlačítko přihlásit

1

Nejlepší odpověď

0

Voláš onSubmit, který vyzývá loginUser. Na loginUser i když, máte volání API, který je asynchronní, což znamená, že hned po volání loginUser, auth.isAuth vždy bude nepravda.

Musíte se ujistit, auth.isAuth === true na componentDidMount vaše přihlašovací obrazovce, nebo použít něco jako redux-observable reagovat na akce, které jsou odesílány a provádět navigaci.

2021-11-24 01:04:12

Zkuste použít ověření autentizace a navigace uvnitř useEffect s řadou závislostí vyprázdnit, ale problém utišil.
smichi

Podívejte se na to, co doktoři reagovat-navigační říct, týkající se ověřování toků: reactnavigation.org/docs/auth-flow
romin21

V jiných jazycích

Tato stránka je v jiných jazycích

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