react-native - props - react navigation first screen
React Navigation-navegar a otra pestaƱa y reiniciar la pila (5)
Estoy intentando enrutar de un StackNavigator a otro, los cuales están dentro de un TabNavigator. Actualmente puedo llegar simplemente haciendo:
this.props.navigation.navigate(''Screen3'')
Pero también quiero restablecer esa pestaña cuando vaya a ella. Aquí es cómo se configuran mis navegadores de aplicaciones en general:
- Main (StackNavigator)
- LoginScreen
- MainTabs (TabNavigator)
- Tab1 (StackNavigator)
- Screen1
- Screen2
- Tab2 (StackNavigator)
- Screen3
- Screen4
¿Cómo podría navegar a Screen3
pero también reiniciar el StackNavigator Tab2
?
También he intentado hacer esto, en vano:
let resetAction = NavigationActions.reset({
index: 0,
key: ''Tab2'',
actions: [
NavigationActions.navigate({ routeName: ''Screen3'' })
],
});
this.props.navigation.dispatch(resetAction);
Aquí es cómo resolví esto usando NavigationService :
NavigationService.reset({
index: 0,
key: null, // required to reset tabs
actions: [
NavigationActions.navigate({
routeName: ''MainTabs'',
action: NavigationActions.navigate({ routeName: ''Tab2'' }),
}),
],
});
NavigationService.navigate({
key: ''Screen3'',
routeName: ''Screen3'',
});
presta atención a la opción ''clave: nula'', esto hizo que funcionara
Primero tendrás que navegar a la pestaña y luego restablecer la pantalla que deseas
this.props.navigation.navigate(''Tab2'');
let resetAction = StackActions.reset({
index: 0,
actions: [
NavigationActions.navigate(
{
routeName: ''Screen3'',
params: {},
key: Math.random() + ''Screen3''
}
)
]
})
this.props.navigation.dispatch(resetAction);
Puede usar la action
avanzada de la api de navigate
combinada con las funciones dependientes de Navigator sin usar ninguna acción adicional o llamada de navegación .
Aquí hay un ejemplo
navigateWithReset = (routeName) => {
const navigateAction = NavigationActions.navigate({
routeName,
action: this.props.navigation.popToTop(),
});
this.props.navigation.dispatch(navigateAction);
};
El enlace de snack de trabajo se puede encontrar here .
Se basa en la arquitectura de su pila, sin embargo, debe navegar después de su despacho resetAction
.
Después de resetAction
despachamos el uso debajo del código:
this.props.navigation.navigate(''Screen3'');
Tendrá que enviar dos acciones de navegación, una para restablecer la pila de la pestaña actual y otra para navegar a la siguiente pantalla:
let resetAction = NavigationActions.reset({
index: 0,
actions: [
NavigationActions.navigate({ routeName: ''Screen1'' })
],
});
this.props.navigation.dispatch(resetAction);
this.props.navigation.navigate(''Screen3'');
Aquí hay una snack