React native-如何在 react native 中只显示一次登录屏幕?

Posted

技术标签:

【中文标题】React native-如何在 react native 中只显示一次登录屏幕?【英文标题】:React native- How to display login screen only one time in react native? 【发布时间】:2016-12-09 00:49:44 【问题描述】:

我正在创建一个项目,其中有一个注册屏幕,用于用户注册到应用程序。此注册屏幕应该只在第一次可见,因此用户可以填写并登录,但当用户第二次打开应用程序时,应用程序必须导航到主页。

我不明白该怎么做。

【问题讨论】:

【参考方案1】:

如果您使用本地存储来存储用户登录的事实,您可以检查用户是否存在于存储中。如果用户存在于存储中,则设置表示初始路由组件的状态(将它们引导到登录以外的屏幕)。否则让起始组件成为登录组件。

如果您使用的是 Navigatorios,您可能会在 index.ios.js 文件中执行以下操作:

return(
<NavigatorIOS
    style=styles.navigatorContainer
    initialRoute=
      title: this.state.title,
      component: this.state.component,
    
 />
 )

【讨论】:

【参考方案2】:

您应该存储凭据,或者一个简单的布尔标志,指示用户在 AsyncStorage 中登录

某些服务(如 Firebase)在其 SDK 内部执行此操作

然后,在应用启动时,您从 AsyncStorage 读取数据并决定显示哪个屏幕。

【讨论】:

【参考方案3】:

在登录按钮上

onLogin=async()=>
  //Your login logic
    await AsyncStorage.setItem('isLoggedIn',true)
    

在初始屏幕上

componentDidMount=async()=>
  let loginStatus=await AsyncStorage.getItem('isLoggedIn')
  this.props.navigation.navigate(loginStatus ? 'Home':'Login')
    

这可能对你有帮助

【讨论】:

【参考方案4】:

您应该使用 localStorage 来检查应用是否有凭据并将应用重定向到这样的登录屏幕

  useEffect(() => 

      const _retrieveData = async () => 
         try 
           const value = await AsyncStorage.getItem('@key');
           if (value !== null) 

             // let's go 
           else 
              props.navigation.navigate('HomeScreen')
           
          catch (error) 
           // Error retrieving data
         
      ;

         _retrieveData()

    ,[])

【讨论】:

以上是关于React native-如何在 react native 中只显示一次登录屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

单击使用 react-native 时如何更改图像和文本颜色?

如何使用状态动态更改 React Native 转换?

如何将库的本地副本添加和编译到 Android React Native 模块中?

如何在 react-native 中获取应用程序根目录

React Native - 文本位于状态栏 - 如何进一步降低?

如何解决使用 react-native 构建 APK 时无法执行 aapt 的错误?