React native 在跳过之前显示登录屏幕
用户登录到我的应用程序后,我在ComponentWillMount上每次启动时都使用AsyncStorage加载一个登录令牌,屏幕总是在跳转到下一个屏幕之前呈现屏幕。登录完成后,是否有办法在登录屏幕上创建自动跳过?我正在使用createStackNavigator导航我的应用程序React native 在跳过之前显示登录屏幕,react-native,React Native,用户登录到我的应用程序后,我在ComponentWillMount上每次启动时都使用AsyncStorage加载一个登录令牌,屏幕总是在跳转到下一个屏幕之前呈现屏幕。登录完成后,是否有办法在登录屏幕上创建自动跳过?我正在使用createStackNavigator导航我的应用程序 async componentWillMount(){ let res = await AsyncStorage.getItem("token"); if (res !== null ){ th
async componentWillMount(){
let res = await AsyncStorage.getItem("token");
if (res !== null ){
this.props.navigation.navigate("nextScreen");
}
}首先,您必须使用
createSwitchNavigator
尝试为登录/注册屏幕创建StackNavigation,例如调用它AuthStack
const AuthStack = createStackNavigator(
{
Login: { screen: Login },
Register: { screen: Register },
},
{
initialRouteName: 'Login',
headerMode: 'none',
}
);
然后再次创建AppStack
,只需与除登录和注册之外的所有其他屏幕堆叠即可
const AppStack = createStackNavigator(
{
...
},
{
...
}
);
然后,您将需要一个AuthLoadingScreen
这是您将获得令牌检查代码的地方
现在,您只需使用createSwitchNavigator
创建一个交换机导航器,它首先调用加载屏幕并检查令牌,然后加载应用程序或登录屏幕,如下所示:
const AppNavigator = createSwitchNavigator(
{
AuthLoading: AuthLoadingScreen,
App: AppStack,
Auth: AuthStack,
},
{
initialRouteName: 'AuthLoading',
}
);
AuthLoadingScreen
的代码应该是这样的,使用componentDidMount
而不是componentWillMount
componentDidMount = () => {
const token = await AsyncStorage.getItem('token');
// check if token exist or not
if (token) {
this.props.navigation.navigate('App');
} else {
this.props.navigation.navigate('Auth');
}
}
在其渲染方法中,您可能需要添加微调器或只是“加载…”或任何您想要的内容。首先,您必须使用
createSwitchNavigator在堆栈导航中添加一些代码。
尝试为登录/注册屏幕创建StackNavigation,例如调用它AuthStack
const AuthStack = createStackNavigator(
{
Login: { screen: Login },
Register: { screen: Register },
},
{
initialRouteName: 'Login',
headerMode: 'none',
}
);
然后再次创建AppStack
,只需与除登录和注册之外的所有其他屏幕堆叠即可
const AppStack = createStackNavigator(
{
...
},
{
...
}
);
然后,您将需要一个AuthLoadingScreen
这是您将获得令牌检查代码的地方
现在,您只需使用createSwitchNavigator
创建一个交换机导航器,它首先调用加载屏幕并检查令牌,然后加载应用程序或登录屏幕,如下所示:
const AppNavigator = createSwitchNavigator(
{
AuthLoading: AuthLoadingScreen,
App: AppStack,
Auth: AuthStack,
},
{
initialRouteName: 'AuthLoading',
}
);
AuthLoadingScreen
的代码应该是这样的,使用componentDidMount
而不是componentWillMount
componentDidMount = () => {
const token = await AsyncStorage.getItem('token');
// check if token exist or not
if (token) {
this.props.navigation.navigate('App');
} else {
this.props.navigation.navigate('Auth');
}
}
在它的渲染方法中,你可能想添加一个微调器,或者只是“加载…”或者你想要的任何东西。太棒了,真管用!我花了一段时间,因为我以错误的顺序创建了stackNavigators,现在加载感觉非常平稳。:)太棒了,成功了!我花了一段时间,因为我以错误的顺序创建了stackNavigators,现在加载感觉非常平稳。:)