最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

react-navigation 如何判斷用戶是否登錄跳轉(zhuǎn)到登錄頁的方法

 更新時間:2017年12月01日 11:49:24   作者:RitchieWei  
本篇文章主要介紹了react-navigation 如何判斷用戶是否登錄跳轉(zhuǎn)到登錄頁的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文介紹了react-navigation 如何判斷用戶是否登錄跳轉(zhuǎn)到登錄頁的方法,分享給大家,也給自己留個筆記,具體如下:

新建一個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' 
 
 
//底部菜單欄設(shè)置 
const MainScreenNavigator = TabNavigator({ 
    IndexScreen: { 
      screen: IndexScreen, 
      navigationOptions: { 
        tabBarLabel: '首頁', 
        headerLeft:null,//去除返回按鈕 
        tabBarIcon: ({ tintColor }) => ( 
          <Image 
            source={require('./img/ic_image.png')} 
            style={[styles.icon, {tintColor: tintColor}]} 
          /> 
        ), 
        onNavigationStateChange:(()=> alert("首頁")) 
        // initialRouteName:'IndexScreen' 
      }, 
    }, 
     
    MeScreen: { 
      screen: MeScreen, 
      navigationOptions: { 
        tabBarLabel:'我的', 
        tabBarIcon: ({ tintColor }) => ( 
          <Image 
            source={require('./img/ic_me.png')} 
            style={[styles.icon, {tintColor: tintColor}]} 
          /> 
        ), 
        // initialRouteName:'MeScreen' 
      } 
    } 
  }, 
  { 
    // trueinitialRouteName:'MeScreen',//設(shè)置默認(rèn)的頁面組件 
    // initialRouteName:'MeScreen', 
    lazy:true,//是否根據(jù)需要懶惰呈現(xiàn)標(biāo)簽,而不是提前,意思是在app打開的時候?qū)⒌撞繕?biāo)簽欄全部加載,默認(rèn)false,推薦為true 
    // order: ['IndexScreen','FindScreen','ListNewScreen','MeScreen'], //order 來定義tab顯示的順序,數(shù)組形式 
    animationEnabled: false, // 切換頁面時是否有動畫效果 
    tabBarPosition: 'bottom', // 顯示在底端,android 默認(rèn)是顯示在頁面頂端的 
    swipeEnabled: false, // 是否可以左右滑動切換tab 
    // backBehavior: 'none', // 按 back 鍵是否跳轉(zhuǎn)到第一個Tab(首頁), none 為不跳轉(zhuǎn) 
    tabBarOptions: { 
      activeTintColor: '#2196f3', // 文字和圖片選中顏色 
      inactiveTintColor: '#999', // 文字和圖片未選中顏色 
      showIcon: true, // android 默認(rèn)不顯示 icon, 需要設(shè)置為 true 才會顯示 
      indicatorStyle: { 
        height: 0 // 如TabBar下面顯示有一條線,可以設(shè)高度為0后隱藏 
      }, 
      style: { 
        backgroundColor: '#fff', // TabBar 背景色 
        height: 60 
      }, 
      labelStyle: { 
        fontSize: 14, // 文字大小 
        marginTop:2 
        // lineHeight:44 
      }, 
    } 
  }); 
 
//跳轉(zhuǎn)路由設(shè)置 
const FirstApp = StackNavigator({ 
  IndexScreen: { 
    screen: MainScreenNavigator, 
    // initialRouteName: 'IndexScreen' 
  }, 
  MeScreen: {screen: MeScreen}, 
  Login:{screen: Login}, 
   
}, { 
  initialRouteName: 'IndexScreen', // 默認(rèn)顯示界面 
  navigationOptions: { // 屏幕導(dǎo)航的默認(rèn)選項(xiàng), 也可以在組件內(nèi)用 static navigationOptions 設(shè)置(會覆蓋此處的設(shè)置) 
    headerStyle:{elevation: 0,shadowOpacity: 0,height:48,backgroundColor:"#2196f3"}, 
    headerTitleStyle:{color:'#fff',fontSize:16}, //alignSelf:'center' 文字居中 
    headerBackTitleStyle:{color:'#fff',fontSize:12}, 
    // headerTintColor:{}, 
    gesturesEnabled:true,//是否支持滑動返回收拾,iOS默認(rèn)支持,安卓默認(rèn)關(guān)閉 
  }, 
  mode: 'card', // 頁面切換模式, 左右是card(相當(dāng)于iOS中的push效果), 上下是modal(相當(dāng)于iOS中的modal效果) 
  headerMode: 'screen', // 導(dǎo)航欄的顯示模式, screen: 有漸變透明效果, float: 無透明效果, none: 隱藏導(dǎo)航欄 
  onTransitionStart: (Start)=>{console.log('導(dǎo)航欄切換開始');}, // 回調(diào) 
  onTransitionEnd: ()=>{ console.log('導(dǎo)航欄切換結(jié)束'); } // 回調(diào) 
}); 
// 
const defaultGetStateForAction = FirstApp.router.getStateForAction; 
 
FirstApp.router.getStateForAction = (action, state) => { 
  //頁面是MeScreen并且 global.user.loginState = false || ''(未登錄) 
  if (action.routeName ==='MeScreen'&& !global.user.loginState) { 
    this.routes = [ 
      ...state.routes, 
      {key: 'id-'+Date.now(), routeName: 'Login', params: { name: 'name1'}}, 
    ]; 
    return { 
      ...state, 
      routes, 
      index: this.routes.length - 1, 
    }; 
  } 
  return defaultGetStateForAction(action, state); 
}; 
 
 
export default class FirstAppDemo extends Component { 
  render() { 
    return ( 
      <FirstApp /> 
    ); 
  } 
} 
 
AppRegistry.registerComponent('FirstApp', () => FirstAppDemo); 
 
 
const styles = StyleSheet.create({ 
  icon: { 
    width: 26, 
    height: 26, 
  }, 
}); 

新建一個全局存儲StorageUtil.js

import React, {Component} from 'react'; 
import {AsyncStorage} from 'react-native'; 
import Storage from 'react-native-storage'; 
 
var storage = new Storage({ 
  // 最大容量,默認(rèn)值1000條數(shù)據(jù)循環(huán)存儲 
  size: 1000, 
 
  // 存儲引擎:對于RN使用AsyncStorage,對于web使用window.localStorage 
  // 如果不指定則數(shù)據(jù)只會保存在內(nèi)存中,重啟后即丟失 
  storageBackend: AsyncStorage, 
 
  // 數(shù)據(jù)過期時間,默認(rèn)一整天(1000 * 3600 * 24 毫秒),設(shè)為null則永不過期 
  defaultExpires: 1000 * 3600 * 24, 
 
  // 讀寫時在內(nèi)存中緩存數(shù)據(jù)。默認(rèn)啟用。 
  enableCache: true, 
 
  // 如果storage中沒有相應(yīng)數(shù)據(jù),或數(shù)據(jù)已過期, 
  // 則會調(diào)用相應(yīng)的sync方法,無縫返回最新數(shù)據(jù)。 
  // sync方法的具體說明會在后文提到 
  // 你可以在構(gòu)造函數(shù)這里就寫好sync的方法 
  // 或是寫到另一個文件里,這里require引入 
  // 或是在任何時候,直接對storage.sync進(jìn)行賦值修改 
  //sync: require('./sync') // 這個sync文件是要你自己寫的 
}) 
 
// 最好在全局范圍內(nèi)創(chuàng)建一個(且只有一個)storage實(shí)例,方便直接調(diào)用 
 
// 對于web 
// window.storage = storage; 
 
// 對于react native 
// global.storage = storage; 
 
// 這樣,在此**之后**的任意位置即可以直接調(diào)用storage 
// 注意:全局變量一定是先聲明,后使用 
// 如果你在某處調(diào)用storage報錯未定義 
// 請檢查global.storage = storage語句是否確實(shí)已經(jīng)執(zhí)行過了 
 
//導(dǎo)出為全局變量 
global.storage = storage; 

新建一個全局變量組件Global.js,用戶存儲用戶登錄的信息
 
//用戶登錄數(shù)據(jù) 
global.user = { 
  loginState:'',//登錄狀態(tài) 
  userData:'',//用戶數(shù)據(jù) 
}; 
//刷新的時候重新獲得用戶數(shù)據(jù)  
storage.load({ 
  key: 'loginState', 
}).then(ret => { 
  global.user.loginState = true; 
  global.user.userData = ret; 
}).catch(err => { 
  global.user.loginState = false; 
  global.user.userData = ''; 
}) 

登錄組件 Login.js

_login() {//登錄函數(shù) 
    // debugger; 
    ToastUtil.show("登錄成功"); 
    // 使用key來保存數(shù)據(jù)。這些數(shù)據(jù)一般是全局獨(dú)有的,常常需要調(diào)用的。 
    // 除非你手動移除,這些數(shù)據(jù)會被永久保存,而且默認(rèn)不會過期。 
    storage.save({ 
      key: 'loginState', // 注意:請不要在key中使用_下劃線符號! 
      data: { 
        userid: '1001', 
        userName:'userName', 
        token: 'token' 
      }, 
 
      // 如果不指定過期時間,則會使用defaultExpires參數(shù) 
      // 如果設(shè)為null,則永不過期 
      // 8個小時后過期 
      expires: 1000 * 3600 * 8 
    }); 
    global.user.loginState = true;//設(shè)置登錄狀態(tài) 
    global.user.userData = { userid: '1001', userName:'userName', token: 'token'};//保存用戶數(shù)據(jù) 
 
    setTimeout(()=>{ 
      this.props.navigation.navigate('UserScreen')//跳轉(zhuǎn)到用戶頁面 
    },2000) 
     
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。   

您可能感興趣的文章:

相關(guān)文章

  • react antd-mobile ActionSheet+tag實(shí)現(xiàn)多選方式

    react antd-mobile ActionSheet+tag實(shí)現(xiàn)多選方式

    這篇文章主要介紹了react antd-mobile ActionSheet+tag實(shí)現(xiàn)多選方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 解決React報錯No duplicate props allowed

    解決React報錯No duplicate props allowed

    這篇文章主要為大家介紹了React報錯No duplicate props allowed解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • React Native基礎(chǔ)入門之初步使用Flexbox布局

    React Native基礎(chǔ)入門之初步使用Flexbox布局

    React中引入了flexbox概念,flexbox是屬于web前端領(lǐng)域CSS的一種布局方案,下面這篇文章主要給大家介紹了關(guān)于React Native基礎(chǔ)入門之初步使用Flexbox布局的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-07-07
  • 基于Cloud?Studio構(gòu)建React完成點(diǎn)餐H5頁面(騰訊云?Cloud?Studio?實(shí)戰(zhàn)訓(xùn)練營)

    基于Cloud?Studio構(gòu)建React完成點(diǎn)餐H5頁面(騰訊云?Cloud?Studio?實(shí)戰(zhàn)訓(xùn)練營)

    最近也是有機(jī)會參與到了騰訊云舉辦的騰訊云Cloud Studio實(shí)戰(zhàn)訓(xùn)練營,借此了解了騰訊云Cloud?Studio產(chǎn)品,下面就來使用騰訊云Cloud?Studio做一個實(shí)戰(zhàn)案例來深入了解該產(chǎn)品的優(yōu)越性吧,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • React中如何處理承諾demo

    React中如何處理承諾demo

    這篇文章主要為大家介紹了React中如何處理承諾demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • React組件的生命周期詳細(xì)描述

    React組件的生命周期詳細(xì)描述

    本篇文章主要介紹了React組件生命周期,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-10-10
  • React-Hooks之useImperativeHandler使用介紹

    React-Hooks之useImperativeHandler使用介紹

    這篇文章主要為大家介紹了React-Hooks之useImperativeHandler使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • React?Native實(shí)現(xiàn)Toast輕提示和loading效果

    React?Native實(shí)現(xiàn)Toast輕提示和loading效果

    這篇文章主要介紹了React Native實(shí)現(xiàn)Toast輕提示和loading效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • react使用節(jié)流函數(shù)防止重復(fù)點(diǎn)擊問題

    react使用節(jié)流函數(shù)防止重復(fù)點(diǎn)擊問題

    這篇文章主要介紹了react使用節(jié)流函數(shù)防止重復(fù)點(diǎn)擊問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • React文件名和目錄規(guī)范最佳實(shí)踐記錄(總結(jié)篇)

    React文件名和目錄規(guī)范最佳實(shí)踐記錄(總結(jié)篇)

    React在使用時非常靈活,如果沒有一個規(guī)范約束項(xiàng)目,在開發(fā)過程中會非?;靵y,本文將介紹幾個優(yōu)秀的規(guī)范,介紹文件名和目錄前,需要先簡述一下幾種通用的類型,用來區(qū)分文件的功能,感興趣的朋友一起看看吧
    2022-05-05

最新評論

鞍山市| 祁连县| 洛扎县| 乌拉特后旗| 岳普湖县| 大余县| 澄迈县| 郁南县| 潼南县| 阳谷县| 临潭县| 洪湖市| 包头市| 兴业县| 铜陵市| 勐海县| 敖汉旗| 新民市| 淮南市| 全南县| 怀化市| 安徽省| 北碚区| 萍乡市| 茌平县| 凤翔县| 大悟县| 凯里市| 宝清县| 昂仁县| 宜都市| 洛阳市| 察隅县| 聂荣县| 南澳县| 蓝田县| 盐山县| 沈阳市| 来安县| 孟村| 芷江|