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);
}
- haben Sie versucht, Navigator.dismiss(); ?
- Ich sehe nicht, dass in den docs. Hast du einen link? @Codesingh
- Es gibt einen pull-request für diese: github.com/react-community/react-navigation/pull/2520
- genial!
InformationsquelleAutor Turnipdabeets | 2017-05-12
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine schnelle Lösung.
Dies wird entfernen Sie ALLE übergänge, die beim navigieren (vorwärts oder rückwärts).
in transitionConfig fügen Sie diese:
Den transitionConfig ist eine Funktion, die ein Objekt zurückgibt, das überschreibt Standard-Bildschirm übergänge. https://reactnavigation.org/docs/navigators/stack
reagieren-native navigation hat
popToTop
wir können es verwenden, wie SchlagKönnen Sie dies mit Hilfe der
popToTop
Methode aus der Navigation prop. Auch, wenn Sie mit redux, sollten Sie aktualisieren Sie Ihre Redux-integration.Hoffe, das hilft!
Verbrachte auch einige Zeit auf dieser, lassen Sie mich zusammenfassen, was ich entdeckt habe, gibt es mehrere Lösungen/workarounds für diese:
1) Verwenden Sie
CardStackStyleInterpolator
Den pull-request erwähnt Cristiano Santos scheint zusammengeführt werden. So können Sie laden Sie die
CardStackStyleInterpolator
mit diesem import:Anwenden es so:
In meinem Fall, ich habe gerade springen, um zum nächsten Bildschirm wie:
Aber in meinen Druckminderer habe ich einen reset der navigator, wenn der
Modal_AddGoodClass
Bildschirm ausgelöst wird:Funktioniert das ziemlich gut, außer der Tatsache, dass immer noch ein "zurück" - animation wird verwendet, anstelle von "vorwärts" ein.
Finden Sie auch hier einige Beispiel-code, der verwendet
CardStackStyleInterpolator
.2) Überschreiben
getStateForAction
:Als Fendrian erwähnt hier können Sie überschreiben
getStateForAction
des Routers zu vermeiden, den navigator zurück. Dies scheint zu funktionieren, außer für die "swipe-back" - Geste an iOS:Dies ist meine funktionierende Lösung für das zurücksetzen zurück zur Startseite (root) ohne die Schaffung neuer route
categoriesNav
verwiesen wird, um meinen stack navigator