Ich baue eine Schublade mit React Navigation und möchte etwas Logik ausführen, wenn der Benutzer die Schublade schließt. Ich sehe nichts Offensichtliches in der Dokumentation, die mir erlaubt, dies zu tun. Kennt jemand eine Möglichkeit, dies zu tun?Status der React Navigation-Schublade? (offen oder geschlossen)
Antwort
Hmm nicht wirklich viel zu sehen. Eine Möglichkeit wäre, zu steuern das Öffnen/Schließen der Schublade manuell mit:
this.props.navigation.navigate('DrawerOpen'); // open drawer
this.props.navigation.navigate('DrawerClose'); // close drawer
Auf diese Weise können Sie Ihre öffnen/schließen Ereignisse in einer Funktion wickeln, wo Sie tun können, was Sie wollen vor dem Öffnen/Schließen.
Die einzige andere mögliche Lösung, die ich in ihren Dokumenten sah, war eine benutzerdefinierte contentComponent
. Sie können eine Funktion an das Ereignis onItemPress(route)
übergeben, also können Sie vielleicht versuchen, sich daran zu orientieren.
Das Problem ist die DrawerNavigator Griffe Hähne außerhalb der Schublade selbst, so mein Handbuch ruft umgangen würde zu navigieren. contentComponent würde funktionieren, wenn ich etwas tun müsste, wenn diese Elemente gedrückt wurden. Ich versuche gerade, die Statusleiste zu verstecken, während die Schublade geöffnet ist. – callmetwan
Hmm, ich bin überrascht, dass sie dafür kein eingebautes Event haben. Ein schmutziger/hacky Weg wäre, nur einen Click-Event-Listener an die Schublade mit Vanilla JS anzuhängen. Fügen Sie es einfach in die componentDidMount-Lebenszyklusmethode in der Komponente ein, in der sich der DrawerNavigator befindet. Jedes Mal, wenn ein Nutzer klickt, um die Schublade zu öffnen, feuern Sie Ihre eigene Veranstaltung ab. –
Ich schätze die Mühe, aber wieder ist das Problem, wenn der Benutzer die Schublade schließt, nicht öffnet. Ich habe keine Möglichkeit, dieses Ereignis einzufangen. – callmetwan
Sie müssen benutzerdefinierte Navigations Aktionen die DrawerClose
Ereignis erfassen:
const MyDrawerNavigator = DrawerNavigator({
//...
});
const defaultGetStateForAction = MyDrawerNavigator.router.getStateForAction;
MyDrawerNavigator.router.getStateForAction = (action, state) => {
//use 'DrawerOpen' to capture drawer open event
if (state && action.type === 'Navigation/NAVIGATE' && action.routeName === 'DrawerClose') {
console.log('DrawerClose');
//write the code you want to deal with 'DrawerClose' event
}
return defaultGetStateForAction(action, state);
};
Nach @ufxmeng
import {
StatusBar,
} from "react-native";
const MyDrawerNavigator = DrawerNavigator({
//...
});
const defaultGetStateForAction = MyDrawerNavigator.router.getStateForAction;
MyDrawerNavigator.router.getStateForAction = (action, state) => {
if(state && action.type === 'Navigation/NAVIGATE' && action.routeName === 'DrawerClose') {
StatusBar.setHidden(false);
}
if(state && action.type === 'Navigation/NAVIGATE' && action.routeName === 'DrawerOpen') {
StatusBar.setHidden(true);
}
return defaultGetStateForAction(action, state);
};
Siehe hier https://github.com/react-community/react-navigation/blob/673b9d2877d7e84fbfbe2928305ead7e51b04835/docs/api/routers/Routers.md und hier https://github.com/aksonov/react-native-router-flux/issues/699
Ohne Redux Integration sein kann verwendet onNavigationStateChange auf Router-Komponente. Schubladenaktionen einfach abfangen: DrawerOpen und DrawerClose.
Beispiel:
handleNavigationState = (previous, next, action) => {
if (action.routeName === 'DrawerOpen') {
this.props.setDrawerState(true);
} else if (action.routeName === 'DrawerClose') {
this.props.setDrawerState(false);
}
}
render() {
return (
<Router onNavigationStateChange={this.handleNavigationState} />
);
}
- 1. Prüfen, ob elasticsearch index offen oder geschlossen ist
- 2. Die Verbindung wurde nicht geschlossen. Der aktuelle Status der Verbindung ist offen. C# Fehler
- 3. Herstellung Standardverhalten geschlossen statt offen
- 4. InvalidOperationException Die Verbindung wurde nicht geschlossen. Der aktuelle Status der Verbindung ist offen
- 5. SpringBoot + REST + Sicherheit - entweder alle Zugriffe offen oder alle geschlossen
- 6. Kubernetes pod Status immer „offen“
- 7. Offen-geschlossen-Prinzip und Java-Modifikator "final"
- 8. Warum Singleton bricht offen/geschlossen Prinzip?
- 9. Die Verbindung wurde nicht geschlossen der Verbindungsstatus ist offen
- 10. Anzahl der Zeilen mit Status "geschlossen" und Status "nicht geschlossen" für jeden Monat eines Jahres
- 11. Status der untergeordneten Komponenten in React
- 12. Zuverlässig feststellen, ob das angulare ui Modal offen oder geschlossen ist (ein- oder ausgeblendet)
- 13. Bootstrap 3 Modal: Wie man überprüft, ob Modal offen oder geschlossen ist mit jquery/javascript
- 14. React - Setting Status
- 15. React - Status ist inkonsistent
- 16. React kann den Status
- 17. React: Verzögerung bei der Aktualisierung des Status
- 18. Globaler Status in React Native
- 19. React Native Increment-Status onPress
- 20. Überprüfen Sie die Verbindung offen oder geschlossen? (In C in Linux)
- 21. React Update-Status bei Klick
- 22. Die Verbindung wurde nicht geschlossen, die aktuelle Zustand der Verbindung ist offen
- 23. Kontrollkästchen behält Status in React
- 24. Meteor/React: Status basierend auf Login-Status ändern
- 25. react-native: Die Wächter-Verbindung wurde geschlossen
- 26. Überprüfen SQLite-Datenbank ist offen oder in Android
- 27. Erstellen Sie eine Funktion zur Überprüfung der Tag und Uhrzeit und geben Sie offen oder geschlossen PHP
- 28. Ich versuche zu machen, haben mein Javascript mir sagen, wenn der Ort offen oder geschlossen ist aber es funktioniert nicht
- 29. React Native Permissions nicht den Status drucken
- 30. Wie wird der eingeloggte Status mit dem React Router gehandhabt?
finden Sie eine Lösung, nicht jene Werke für mich –