Я хочу установить initialRouteName
моего TabNavigator
динамически в заставке.В заставке я решаю initialRouteName
на основе результата API, но я не знаю, как передать это имя маршрута в мой файл маршрутизатора.
Router.tsx:
public static Routes = StackNavigator({
Splash: { screen: Splash },
Verification: { screen: Verification },
Login: { screen: Login },
Main: {
screen: TabNavigator({
Calendar: { screen: Calendar },
PendingReserves: { screen: PendingReserves },
Profile: { screen: Profile },
},
{initialRouteName: 'Calendar'}) // I want to set it from splash
}
}, {initialRouteName: 'Splash'} );
splash.tsx:
constructor(props: SplashScreenProps, context: any) {
super(props, context);
this.state = {
Error: false
}
this.check()
}
check = async () => {
let pending = await dataService.getPendingReserves(data);
if (pending.Success) {
if (pending.result.length > 0) {
// go to pendingReserve Tab
} else {
// go to Calendar Tab
}
} else {
this.setState({ Error: true })
}
}
Я попытался статически перенаправить на PendingReserve и в его конструкторе, проверить API и вкладку измененияпри необходимости, но я не мог программно изменить вкладку с помощью этого кода:
pendingReserve.tsx:
fetchData = async () => {
let res = await Utilities.getPendingReserves()
if (res && res.length > 0) {
...
} else {
const resetAction = NavigationActions.reset({
index: 0,
actions: [NavigationActions.navigate({ routeName: 'Calendar' })]
})
this.props.navigation.dispatch(resetAction)
// this.props.navigation.navigate({ routeName: 'Calendar' })
// both reset and simple navigate are not works correctly...
}
}
Так что любое решение для динамически установленной initialRouteName
ИЛИ изменения вкладки программно поможет мне.Спасибо
Я использую:
"react-native": "0.49.3",
"react-navigation": "^1.0.0-beta.13"