phe*_*non 1 android reactjs react-native react-navigation
我想做一个简单的任务:成功登录后,将用户重定向到他的主页。为此,我使用react-navigation的StackNavigator:
// App.js
class App extends Component {
render() {
return (<RootStack />);
}
}
const RootStack = createStackNavigator(
{
Login: { screen: Login, navigationOptions: { header: null }},
Home: { screen: Home, navigationOptions: { header: null }}
},
{
initialRouteName: 'Root'
}
)
Run Code Online (Sandbox Code Playgroud)
登录后如何防止用户返回登录界面?为了防止在android中使用后退按钮,我将使用此按钮:
// Home.js
import React, { Component} from 'react';
import { ... , BackHandler } from 'react-native';
class Home extends Component {
constructor(props) {
super(props);
BackHandler.addEventListener('hardwareBackPress', this.onBackButtonPressAndroid);
}
onBackButtonPressAndroid = () => {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
但是这样做,我完全禁用了后退按钮。还有另一种方法可以达到这个目的吗?
该反应本地文件对如何使认证流程极好的页面。
您可能还不熟悉SwitchNavigator。SwitchNavigator的目的是一次只显示一个屏幕。默认情况下,它不处理后退操作,并且在您离开时将路由重置为其默认状态。这是我们希望从身份验证流程中获得的确切行为:当用户登录时,我们希望放弃身份验证流程的状态并卸载所有屏幕,并且当我们按下硬件后退按钮时,我们希望无法进行操作。回到认证流程。我们使用导航动作在SwitchNavigator中的路线之间切换。您可以在API参考中阅读有关SwitchNavigator的更多信息。
根据文档,这SwitchNavigator
是这样实现的:
import { createSwitchNavigator, createStackNavigator } from 'react-navigation';
// Implementation of HomeScreen, OtherScreen, SignInScreen, AuthLoadingScreen
// goes here.
const AppStack = createStackNavigator({ Home: HomeScreen, Other: OtherScreen });
const AuthStack = createStackNavigator({ SignIn: SignInScreen });
export default createSwitchNavigator(
{
AuthLoading: AuthLoadingScreen,
App: AppStack,
Auth: AuthStack,
},
{
initialRouteName: 'AuthLoading',
}
);
Run Code Online (Sandbox Code Playgroud)
因此,要实现您想要的功能,您需要将其更改RootStack
为以下内容(请注意,我尚未测试此代码):
const RootStack = createSwitchNavigator(
{
Loading: ,//put your loading screen here
Auth: { screen: Login, navigationOptions: { header: null }},
App: { screen: Home, navigationOptions: { header: null }}
},
{
initialRouteName: 'Loading'
}
)
Run Code Online (Sandbox Code Playgroud)
然后,在加载屏幕中,您将获取所需的任何状态以确定用户是否已登录,然后调用this.props.navigation.navigate('App');
以跳过登录屏幕并将用户直接带到应用程序,或this.props.navigation.navigate('Auth');
将用户发送到登录名页。在SwitchNavigator
为你自动处理禁用后退导航。
归档时间: |
|
查看次数: |
3014 次 |
最近记录: |