react-native - 如何在 react native 中构建登录和注册系统
问题描述
我正在做一个反应原生的登录和注册系统。我总共有 13 个屏幕,其中 4 个屏幕需要人不登录,4 个屏幕需要人登录,其余 5 个与登录状态无关。
我已经成功地将详细信息提取到应用程序中并将其存储在 AsyncStorage 中。然后我使用了两种不同类型的方法。
我已经使用下面提到的函数“检查”[在渲染中尝试过,组件确实安装和构造函数]来执行用户数据是否保留在 AsyncStorage 中,如果存在,我已将用户重定向到“主”屏幕。但是,每当我返回登录页面时,这都有效,我没有被重定向。
我制作了 3 个不同的导航器,一个是独立的,一个需要登录,一个不需要登录。这会产生一个问题,我无法从一个导航器导航到另一个导航器的特定屏幕。
let check = AsyncStorage.getItem('user').then(res => { res = JSON.parse(res); typeof res == 'string' ? alert(res) : this.props.navigation.navigate('HomeScreen');
. });
我这里有两个问题。
1.有什么方法可以让我从一个导航器导航到另一个导航器的特定屏幕?
2.达到我要求的结果的最佳方法是什么?
解决方案
在createSwitchNavigator的帮助下,您可以实现此Auth Flow
设置我们的导航器
import { createSwitchNavigator, createStackNavigator, createAppContainer } 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 createAppContainer(createSwitchNavigator(
{
AuthLoading: AuthLoadingScreen,
App: AppStack,
Auth: AuthStack,
},
{
initialRouteName: 'AuthLoading',
}
));
实现我们的身份验证加载屏幕
import React from 'react';
import {
ActivityIndicator,
AsyncStorage,
StatusBar,
StyleSheet,
View,
} from 'react-native';
class AuthLoadingScreen extends React.Component {
constructor(props) {
super(props);
this._bootstrapAsync();
}
// Fetch the token from storage then navigate to our appropriate place
_bootstrapAsync = async () => {
const userToken = await AsyncStorage.getItem('userToken');
// This will switch to the App screen or Auth screen and this loading
// screen will be unmounted and thrown away.
this.props.navigation.navigate(userToken ? 'App' : 'Auth');
};
// Render any loading content that you like here
render() {
return (
<View>
<ActivityIndicator />
<StatusBar barStyle="default" />
</View>
);
}
}
推荐阅读
- python - BeautifulSoup 无法正确找到元素
- python - 为什么使用冒号与范围进行 numpy 索引会导致奇怪的行为?
- python - Google Colab 在随机迭代中停止训练
- r - 使用 str_replace 替换“(?)”
- javascript - 如何动态发送 FCM 推送通知?
- ios - 如何在重建的网格上放置锚以获得准确性
- excel-formula - 我正在寻找一个公式,通过它我可以将两个单元格(一个单元格包含 TEXT,其他单元格包含 HYPERLINK URL)加入单个 HYPERLINKED 单元格
- odoo - 如何在odoo14中删除所有形式的创建、创建和编辑?
- python - 使用 Open CV Python 在图像中查找模板/对象
- reactjs - socket.io (on message) 每条消息触发多次