react-native - 如何在 React Native 中构建登录和注册系统

标签 react-native react-native-navigation

我正在用 React Native 制作一个登录和注册系统。我总共有 13 个屏幕,其中 4 个屏幕需要用户不登录,4 个屏幕需要用户登录,其余 5 个屏幕与登录状态无关。

我已成功将详细信息提取到应用程序中并将其存储在 AsyncStorage 中。然后我使用了两种不同类型的方法。

  1. 我使用了下面提到的函数“check”[在渲染和组件中尝试过挂载和构造函数]来检查用户数据是否保存在 AsyncStorage 中,如果存在,我将用户重定向到“Home” ' 屏幕。 但是,只要我返回登录页面,我就不会被重定向。

  2. 我制作了 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>
    );
  }
}

关于react-native - 如何在 React Native 中构建登录和注册系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57635874/

相关文章:

javascript - 未选中复选框时删除项目

javascript - 调用 AppRegistry.registerComponent 失败

react-native - React-native-paper 上的 TextInput 不起作用

react-native - React Native - native UI 组件

javascript - React-native,在 android 上使用全屏图像

android - 在 react native 的 ListView 中简单转到页面

reactjs - 如何在嵌套的 Tab.Navigator 中查找当前屏幕/路线

reactjs - 如何使用 Redux Provider 包装导航堆栈(createSwitchNavigator)?

javascript - react 原生 : Stack Navigator mode ='card' or mode ='modal' is not working (expo project)

javascript - react native 导航 v2 : Get current route