Reagieren-Navigation: Navigieren Sie Zurück Zur Wurzel mit NavigationActions.reset, goBack und getStateForAction

Sagen, ich habe navigiert durch die 4 screens in meinem StackNavigator App und jetzt möchte ich zu gehen zurück zu dem ersten Bildschirm. Es scheint drei verschiedene Möglichkeiten, dies zu tun, und Sie tun, navigieren Sie zu, wo ich will zu tun, aber jeder Weg hat eine animation, die Zyklen durch jeden vorherigen Bildschirm.

Gibt es eine saubere Art und Weise zu navigieren aus SCREEN_D zu SCREEN_A?

In anderen Worten, ich will das nicht sehen SCREEN_C und SCREEN_B Bruchteilen von Sekunden zu sehen, bevor SCREEN_A beim navigieren rückwärts aus SCREEN_D

navigation.navigate(SCREEN_A);
...
navigation.navigate(SCREEN_B);
...
navigation.navigate(SCREEN_C);
...
navigation.navigate(SCREEN_D);

Drei Möglichkeiten, dies zu tun:

1.

return this.props.navigation
               .dispatch(NavigationActions.reset(
                 {
                    index: 0,
                    actions: [NavigationActions.navigate({ routeName: 'SCREEN_A'})]
                  }));

2.

 const {SCREEN_B_KEY} = this.props.navigation.state.params
 this.props.navigation.goBack(SCREEN_B_KEY)

3.

const defaultGetStateForAction = Navigation.router.getStateForAction;

Navigation.router.getStateForAction = (action, state) =>{
  if(action.type === "Navigation/BACK"){
    const routes = [
      {routeName: 'First'},
    ];
    return {
      ...state,
      routes,
      index: 0,
    };
  }
  return defaultGetStateForAction (action,state);
}
Schreibe einen Kommentar