首頁 web前端 js教程 在react-navigation中如何判斷使用者是否登入跳到登入頁

在react-navigation中如何判斷使用者是否登入跳到登入頁

Jun 23, 2018 pm 02:24 PM
react 登入

本篇文章主要介紹了react-navigation 如何判斷使用者是否登入跳到登入頁面的方法,具有一定的參考價值,有興趣的小夥伴們可以參考一下

本文介紹了react -navigation 如何判斷使用者是否登入跳到登入頁面的方法,分享給大家,也給自己留個筆記,具體如下:

新建一個index.js

import React, {Component} from 'react'; 
import {AppRegistry, Text, View, Button,Image,StyleSheet,BackHandler,ToastAndroid} from 'react-native'; 
import { StackNavigator,TabNavigator,NavigationActions } from 'react-navigation'; 
 
 
 
//全局存储 
import stroage from './StorageUtil'; 
import './Global' 
 
import IndexScreen from './Index' 
import MeScreen from './Me' 
import Login from './Login' 
 
 
//底部菜单栏设置 
const MainScreenNavigator = TabNavigator({ 
    IndexScreen: { 
      screen: IndexScreen, 
      navigationOptions: { 
        tabBarLabel: '首页', 
        headerLeft:null,//去除返回按钮 
        tabBarIcon: ({ tintColor }) => ( 
          <Image 
            source={require(&#39;./img/ic_image.png&#39;)} 
            style={[styles.icon, {tintColor: tintColor}]} 
          /> 
        ), 
        onNavigationStateChange:(()=> alert("首页")) 
        // initialRouteName:&#39;IndexScreen&#39; 
      }, 
    }, 
     
    MeScreen: { 
      screen: MeScreen, 
      navigationOptions: { 
        tabBarLabel:&#39;我的&#39;, 
        tabBarIcon: ({ tintColor }) => ( 
          <Image 
            source={require(&#39;./img/ic_me.png&#39;)} 
            style={[styles.icon, {tintColor: tintColor}]} 
          /> 
        ), 
        // initialRouteName:&#39;MeScreen&#39; 
      } 
    } 
  }, 
  { 
    // trueinitialRouteName:&#39;MeScreen&#39;,//设置默认的页面组件 
    // initialRouteName:&#39;MeScreen&#39;, 
    lazy:true,//是否根据需要懒惰呈现标签,而不是提前,意思是在app打开的时候将底部标签栏全部加载,默认false,推荐为true 
    // order: [&#39;IndexScreen&#39;,&#39;FindScreen&#39;,&#39;ListNewScreen&#39;,&#39;MeScreen&#39;], //order 来定义tab显示的顺序,数组形式 
    animationEnabled: false, // 切换页面时是否有动画效果 
    tabBarPosition: &#39;bottom&#39;, // 显示在底端,android 默认是显示在页面顶端的 
    swipeEnabled: false, // 是否可以左右滑动切换tab 
    // backBehavior: &#39;none&#39;, // 按 back 键是否跳转到第一个Tab(首页), none 为不跳转 
    tabBarOptions: { 
      activeTintColor: &#39;#2196f3&#39;, // 文字和图片选中颜色 
      inactiveTintColor: &#39;#999&#39;, // 文字和图片未选中颜色 
      showIcon: true, // android 默认不显示 icon, 需要设置为 true 才会显示 
      indicatorStyle: { 
        height: 0 // 如TabBar下面显示有一条线,可以设高度为0后隐藏 
      }, 
      style: { 
        backgroundColor: &#39;#fff&#39;, // TabBar 背景色 
        height: 60 
      }, 
      labelStyle: { 
        fontSize: 14, // 文字大小 
        marginTop:2 
        // lineHeight:44 
      }, 
    } 
  }); 
 
//跳转路由设置 
const FirstApp = StackNavigator({ 
  IndexScreen: { 
    screen: MainScreenNavigator, 
    // initialRouteName: &#39;IndexScreen&#39; 
  }, 
  MeScreen: {screen: MeScreen}, 
  Login:{screen: Login}, 
   
}, { 
  initialRouteName: &#39;IndexScreen&#39;, // 默认显示界面 
  navigationOptions: { // 屏幕导航的默认选项, 也可以在组件内用 static navigationOptions 设置(会覆盖此处的设置) 
    headerStyle:{elevation: 0,shadowOpacity: 0,height:48,backgroundColor:"#2196f3"}, 
    headerTitleStyle:{color:&#39;#fff&#39;,fontSize:16}, //alignSelf:&#39;center&#39; 文字居中 
    headerBackTitleStyle:{color:&#39;#fff&#39;,fontSize:12}, 
    // headerTintColor:{}, 
    gesturesEnabled:true,//是否支持滑动返回收拾,iOS默认支持,安卓默认关闭 
  }, 
  mode: &#39;card&#39;, // 页面切换模式, 左右是card(相当于iOS中的push效果), 上下是modal(相当于iOS中的modal效果) 
  headerMode: &#39;screen&#39;, // 导航栏的显示模式, screen: 有渐变透明效果, float: 无透明效果, none: 隐藏导航栏 
  onTransitionStart: (Start)=>{console.log(&#39;导航栏切换开始&#39;);}, // 回调 
  onTransitionEnd: ()=>{ console.log(&#39;导航栏切换结束&#39;); } // 回调 
}); 
// 
const defaultGetStateForAction = FirstApp.router.getStateForAction; 
 
FirstApp.router.getStateForAction = (action, state) => { 
  //页面是MeScreen并且 global.user.loginState = false || &#39;&#39;(未登录) 
  if (action.routeName ===&#39;MeScreen&#39;&& !global.user.loginState) { 
    this.routes = [ 
      ...state.routes, 
      {key: &#39;id-&#39;+Date.now(), routeName: &#39;Login&#39;, params: { name: &#39;name1&#39;}}, 
    ]; 
    return { 
      ...state, 
      routes, 
      index: this.routes.length - 1, 
    }; 
  } 
  return defaultGetStateForAction(action, state); 
}; 
 
 
export default class FirstAppDemo extends Component { 
  render() { 
    return ( 
      <FirstApp /> 
    ); 
  } 
} 
 
AppRegistry.registerComponent(&#39;FirstApp&#39;, () => FirstAppDemo); 
 
 
const styles = StyleSheet.create({ 
  icon: { 
    width: 26, 
    height: 26, 
  }, 
});
登入後複製

新建一個全局儲存StorageUtil.js

import React, {Component} from &#39;react&#39;; 
import {AsyncStorage} from &#39;react-native&#39;; 
import Storage from &#39;react-native-storage&#39;; 
 
var storage = new Storage({ 
  // 最大容量,默认值1000条数据循环存储 
  size: 1000, 
 
  // 存储引擎:对于RN使用AsyncStorage,对于web使用window.localStorage 
  // 如果不指定则数据只会保存在内存中,重启后即丢失 
  storageBackend: AsyncStorage, 
 
  // 数据过期时间,默认一整天(1000 * 3600 * 24 毫秒),设为null则永不过期 
  defaultExpires: 1000 * 3600 * 24, 
 
  // 读写时在内存中缓存数据。默认启用。 
  enableCache: true, 
 
  // 如果storage中没有相应数据,或数据已过期, 
  // 则会调用相应的sync方法,无缝返回最新数据。 
  // sync方法的具体说明会在后文提到 
  // 你可以在构造函数这里就写好sync的方法 
  // 或是写到另一个文件里,这里require引入 
  // 或是在任何时候,直接对storage.sync进行赋值修改 
  //sync: require(&#39;./sync&#39;) // 这个sync文件是要你自己写的 
}) 
 
// 最好在全局范围内创建一个(且只有一个)storage实例,方便直接调用 
 
// 对于web 
// window.storage = storage; 
 
// 对于react native 
// global.storage = storage; 
 
// 这样,在此**之后**的任意位置即可以直接调用storage 
// 注意:全局变量一定是先声明,后使用 
// 如果你在某处调用storage报错未定义 
// 请检查global.storage = storage语句是否确实已经执行过了 
 
//导出为全局变量 
global.storage = storage; 

新建一个全局变量组件Global.js,用户存储用户登录的信息
 
//用户登录数据 
global.user = { 
  loginState:&#39;&#39;,//登录状态 
  userData:&#39;&#39;,//用户数据 
}; 
//刷新的时候重新获得用户数据  
storage.load({ 
  key: &#39;loginState&#39;, 
}).then(ret => { 
  global.user.loginState = true; 
  global.user.userData = ret; 
}).catch(err => { 
  global.user.loginState = false; 
  global.user.userData = &#39;&#39;; 
})
登入後複製

登入元件Login.js

_login() {//登录函数 
    // debugger; 
    ToastUtil.show("登录成功"); 
    // 使用key来保存数据。这些数据一般是全局独有的,常常需要调用的。 
    // 除非你手动移除,这些数据会被永久保存,而且默认不会过期。 
    storage.save({ 
      key: &#39;loginState&#39;, // 注意:请不要在key中使用_下划线符号! 
      data: { 
        userid: &#39;1001&#39;, 
        userName:&#39;userName&#39;, 
        token: &#39;token&#39; 
      }, 
 
      // 如果不指定过期时间,则会使用defaultExpires参数 
      // 如果设为null,则永不过期 
      // 8个小时后过期 
      expires: 1000 * 3600 * 8 
    }); 
    global.user.loginState = true;//设置登录状态 
    global.user.userData = { userid: &#39;1001&#39;, userName:&#39;userName&#39;, token: &#39;token&#39;};//保存用户数据 
 
    setTimeout(()=>{ 
      this.props.navigation.navigate(&#39;UserScreen&#39;)//跳转到用户页面 
    },2000) 
     
  }
登入後複製

上面是我整理給大家的,希望今後會對大家有幫助。

相關文章:

詳細解讀react-navigation的導覽使用

在javascript中詳細解讀Function函數(詳細教學)

使用AngularJS2與D3.js整合如何實作自訂視覺化

在javascript中如何實作依序載入執行js方法

以上是在react-navigation中如何判斷使用者是否登入跳到登入頁的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

小紅書怎麼登入以前的帳號?它換綁後原來號碼遺失了怎麼辦? 小紅書怎麼登入以前的帳號?它換綁後原來號碼遺失了怎麼辦? Mar 21, 2024 pm 09:41 PM

隨著社群媒體的快速發展,小紅書成為許多年輕人分享生活、探索新產品的熱門平台。在使用過程中,有時使用者可能會遇到登入先前帳號的困難。本文將詳細探討如何解決小紅書登入舊帳號的問題,以及如何應對更換綁定後可能遺失原帳號的情況。一、小紅書怎麼登入以前的帳號? 1.找回密碼登入如果長時間未登入小紅書,可能導致帳號被系統回收。為了恢復存取權限,你可以嘗試透過找回密碼的方式重新登入帳號。操作步驟如下:(1)開啟小紅書App或官網,點選「登入」按鈕。 (2)選擇「找回密碼」。 (3)輸入你註冊帳號時所使用的手機號碼

wallpaperengine登入別的號碼後下載別人的桌布怎麼辦 wallpaperengine登入別的號碼後下載別人的桌布怎麼辦 Mar 19, 2024 pm 02:00 PM

當你在自己電腦上登過別人steam帳號之後,剛好這個別人的帳號也有wallpaper軟體,切換回自己帳號之後steam就會自動下載別人帳號訂閱的桌布,使用者可以透過關閉steam雲端同步解決。 wallpaperengine登入別的號碼後下載別人的桌布怎麼辦1、登陸你自己的steam帳號,在設定裡面找到雲端同步,關閉steam雲端同步。 2.登陸你之前登陸的別人的steam帳號,打開wallpaper創意工坊,找到訂閱內容,然後取消全部訂閱。 (以後防止找不到壁紙,可以先收藏再取消訂閱)3、切換回自己的stea

百度網盤網頁版怎麼進?百度網盤網頁版登入入口 百度網盤網頁版怎麼進?百度網盤網頁版登入入口 Mar 13, 2024 pm 04:58 PM

  百度網盤不僅能儲存各種軟體資源,還能分享給別人,支援多端同步,如果你的電腦沒有下載客戶端,可以選擇進入網頁版使用。那麼百度網盤網頁版要怎麼登入呢?下面就來看看詳細介紹。  百度網盤網頁版登入入口:https://pan.baidu.com(複製連結至瀏覽器開啟)  軟體介紹  1、分享  提供文件分享功能,使用者將文件整理,分享給需要的小夥伴。  2、雲端  不佔用太多內存,大多數檔案都保存在雲端,有效節省電腦空間。  3、相簿  支援雲相簿功能,將照片匯入到雲盤中,然後整理,方便大家查看。  

小紅書只記得帳號怎麼登入?只記得帳號怎麼找回來? 小紅書只記得帳號怎麼登入?只記得帳號怎麼找回來? Mar 23, 2024 pm 05:31 PM

小紅書如今已經融入了許多人的日常生活,其豐富的內容和便捷的操作方式讓使用者樂此不疲。有時候,我們可能會忘記帳號密碼,只記得帳號而無法登入確實讓人感到困擾。一、小紅書只記得帳號怎麼登入?當忘記密碼時,我們可以透過手機驗證碼的方式登入小紅書。具體操作如下:1.開啟小紅書App或網頁版小紅書;2.點選「登入」按鈕,選擇「帳號密碼登入」;3.點選「忘記密碼?」按鈕;4.輸入你的帳號,點選「下一步」;5.系統會發送驗證碼到你的手機,輸入驗證碼後點選「確定」;6.設定新的密碼並確認。你也可以透過第三方帳號(如

谷歌瀏覽器無法登入帳號怎麼辦?谷歌瀏覽器帳號不能登入解決方法 谷歌瀏覽器無法登入帳號怎麼辦?谷歌瀏覽器帳號不能登入解決方法 Mar 13, 2024 pm 02:10 PM

  谷歌瀏覽器無法登入帳號怎麼辦?很多用戶在使用這款軟體的時候,某些功能需要用戶們登入谷歌帳號才可以使用,但是嘗試了很多次,都沒有登入成功,面對這個問題,不少用戶都不知道應該如何解決,那麼本期小編就來和各位分享解決方法,希望今日的軟體教程內容可以為大夥帶來幫助。  解決方法如下:  1、點選桌面一個瀏覽器,開啟之後看到這個樣子。  2、此時如果彈出登錄,點擊它,如看不到的點擊右上角。  3、點選登錄,然後輸入你的帳號,帳號不用輸入@之後的一節,點選下一步。  4、輸入密碼,看到這個提示,點選啟用

PHP、Vue和React:如何選擇最適合的前端框架? PHP、Vue和React:如何選擇最適合的前端框架? Mar 15, 2024 pm 05:48 PM

PHP、Vue和React:如何選擇最適合的前端框架?隨著互聯網技術的不斷發展,前端框架在Web開發中起著至關重要的作用。 PHP、Vue和React作為三種代表性的前端框架,每一種都具有其獨特的特徵和優勢。在選擇使用哪種前端框架時,開發人員需要根據專案需求、團隊技能和個人偏好做出明智的決策。本文將透過比較PHP、Vue和React這三種前端框架的特徵和使

愛奇藝如何登入別人的會員帳號 怎麼用別人的愛奇藝會員登入 愛奇藝如何登入別人的會員帳號 怎麼用別人的愛奇藝會員登入 Mar 23, 2024 pm 05:41 PM

愛奇藝app上給大家準備的資源都還是蠻多的,各種各樣的視頻都有,大家都能夠自由的進行選擇,但是這裡也是存著部分的視頻,是需要大家的會員,才能夠讓大家更好的收看到這一些視頻,且大家要是不想要花錢充值會員浪費錢的話,都是會想要為自己的一些朋友們尋求會員帳號,進行登錄觀看的,那麼這裡具體該怎麼登入會員呢,跟著小編一起來看看吧。用別人的愛奇藝會員登入的技巧:  方法一:帳號登入  我們把客戶端打開後,在右下角有一個「我的」字樣的圖標,我們點擊它進入個人介面。  在紅色框框住這個地方

Java框架與前端React框架的整合 Java框架與前端React框架的整合 Jun 01, 2024 pm 03:16 PM

Java框架與React框架的整合:步驟:設定後端Java框架。建立專案結構。配置建置工具。建立React應用程式。編寫RESTAPI端點。配置通訊機制。實戰案例(SpringBoot+React):Java程式碼:定義RESTfulAPI控制器。 React程式碼:取得並顯示API回傳的資料。

See all articles