I'm building an App, and as a test I'm storing token in Keychain. In the navigation I'm using stack navigator and switch navigator. I'm trying to retrieve the token from keychain, and use it to determine the intialRouteName : if the token exist -> Home, if not -> authentification.
So here's my code :
Navigation.js
import React, { Component } from 'react'
import {
createStackNavigator,
createAppContainer,
createSwitchNavigator
} from 'react-navigation'
import Login from '../screens/Login'
import Register from '../screens/Register'
import Home from '../screens/Home'
import * as Keychain from 'react-native-keychain'
async function isLogged() {
const token = await Keychain.getGenericPassword()
if(token.username) {
return 'App'
}else {
return 'Auth'
}
}
const AppStack = createStackNavigator(
{
Home: {
screen: Home,
navigationOptions: {
header: null
}
},
}
)
const AuthStack = createStackNavigator(
{
Login: {
screen: Login,
navigationOptions: {
header: null
}
},
Register: {
screen: Register,
navigationOptions: {
header: null
}
}
},
{
headerLayoutPreset: 'center',
initialRouteName: 'Login'
}
)
const MainNavigator = createAppContainer(
createSwitchNavigator(
{
App: AppStack,
Auth: AuthStack
},
{
initialRouteName: isLogged()
}
)
)
export default MainNavigator
App.js
import React, { Component } from 'react'
import { Provider } from 'react-redux'
import { persistor, store } from './src/store/createStore'
import { PersistGate } from 'redux-persist/integration/react'
import MainNavigator from './src/navigation/StackNavigation'
export default class App extends Component {
render() {
return (
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<MainNavigator></MainNavigator>
</PersistGate>
</Provider>
)
}
}
Unfortunately it is not working, the navigator is rendered before getting the token data. I'm having trouble to figure out how to get the data and have the correct view display.. Any ideas ?