react-navigation

出處

https://reactnavigation.org/docs/intro/
提供的主要功能:

  • 頁面路由(頁面跳轉(zhuǎn)) this.props.navigation.navigate(目標(biāo)頁面,參數(shù))
  • 三種頁面導(dǎo)航結(jié)構(gòu) StackNavigator(基于棧)、TabNavigator(tab切換)阶界、DrawerNavigator(抽屜風(fēng)格)

使用

  • 頁面跳轉(zhuǎn)

使用react-navigation的每個頁面的props中會有一個navigation屬性嗜价,可通過它的navigate方法實現(xiàn)頁面跳轉(zhuǎn)

 this.props.navigation.navigate(
            'First',//路由配置中頁面唯一標(biāo)識
            {
                'from':'Page2'//傳遞的參數(shù)
            })

navigation屬性如下

navigation屬性.png

navigate 用于頁面跳轉(zhuǎn)
state 可以看到上一個頁面?zhèn)鬟f過來的參數(shù)放在了它的params屬性中

  • 頁面導(dǎo)航的創(chuàng)建

有三種導(dǎo)航,創(chuàng)建方式如下

import {StackNavigator, TabNavigator, DrawerNavigator} from 'react-navigation'
//xxx對應(yīng)導(dǎo)航類型,分別取Stack悲立、Tab、Drawer
const XXXNav = XXXNavigator(XXXRouteConfig, XXXNavigatorConfig)

XXXNavigator:視圖導(dǎo)航構(gòu)造器
XXXRouteConfig:頁面路由配置薪铜,主要是聲明所包含的頁面
XXXNavigatorConfig:視圖相關(guān)配置吼渡,主要

  • StackNavigator

效果

StackNavigator.gif

創(chuàng)建

  • 界面標(biāo)題欄的配置信息 相同的配置可以提出來共用容为,更多配置屬性參考官網(wǎng)
const screenConfig = {
    headerStyle: {//標(biāo)題欄樣式
        backgroundColor: 'lightskyblue',
        justifyContent: 'center'
    },
    headerTitleStyle: {//標(biāo)題樣式
        color: 'white',
        alignSelf: 'center'
    },
    headerRight: <View></View>,//這里是為了讓標(biāo)題居中,將標(biāo)題欄右側(cè)填充一個空View
    headerTintColor:'white'//這個屬性可以設(shè)置左側(cè)返回箭頭顏色
}
  • 導(dǎo)航路由配置 聲明所需的頁面
const StackRouteConfig = {
    First: {//First為該頁面唯一標(biāo)識
        screen: Page1,//頁面 即Component
        navigationOptions: screenConfig //前面定義的標(biāo)題欄配置
    },
    Second: {
        screen: Page2,
        navigationOptions: screenConfig
    }
}
  • 導(dǎo)航配置 路由和視圖兩塊配置寺酪,更多配置屬性參考官網(wǎng)
const StackNavigatorConfig = {
    //路由相關(guān)
    initialRouteName: 'Second',//默認啟動頁面  對應(yīng)導(dǎo)航路由頁面配置中的頁面唯一標(biāo)識
    //視圖相關(guān)
    headerMode: 'screen'//為每個頁面添加一個標(biāo)題欄
}
  • 創(chuàng)建一個棧風(fēng)格的導(dǎo)航視圖 前面的一切配置準(zhǔn)備好后坎背,使用構(gòu)造方法創(chuàng)建即可
const StackNav = StackNavigator(StackRouteConfig, StackNavigatorConfig)

在界面中配置標(biāo)題欄信息

除了可以在創(chuàng)建導(dǎo)航視圖時配置標(biāo)題欄,還可以在對應(yīng)頁面內(nèi)通過靜態(tài)方法navigationOptions設(shè)置

export default class Page1 extends BaseComponent {
    //該函數(shù)接收當(dāng)前頁面的導(dǎo)航
    static navigationOptions = ({navigation}) => {
        return {
            headerTitle: 'page_1',//這里返回了標(biāo)題欄的標(biāo)題
        }
    }
    ...
}
  • TabNavigator

效果

TabNavigator.gif

創(chuàng)建

  • 導(dǎo)航路由
//tab路由配置 包含哪些頁面
const TabRouteConfig = {
    First: {
        screen: Tab1,
    },
    Second: {
        screen: Tab2
    },
    Third: {
        screen: Tab3
    }
}
  • 導(dǎo)航配置 主要是對tabbar的配置房维,更多配置屬性參考官網(wǎng)
const TabNavigatorConfig = {
    tabBarPosition: 'bottom',//tabbar的位置
    swipeEnabled: false,//是否允許滑動切換頁面
    animationEnabled: false,//是否允許切換動畫
    lazy: true,//懶加載
    //initialRouteName: 'Second',//初始定位的頁面 默認導(dǎo)航路由中的第一個頁面
    tabBarComponent: (params) => <CustomTabBarComp {...params}/>,//自定義tabbar
}
  • 創(chuàng)建一個tab風(fēng)格的導(dǎo)航視圖 與StackNavigator別無二致
const TabNav = TabNavigator(TabRouteConfig, TabNavigatorConfig)

嵌套導(dǎo)航

一般應(yīng)用首頁是個tab風(fēng)格的界面沼瘫,然后從首頁跳轉(zhuǎn)到其他界面,這就是一種嵌套的導(dǎo)航風(fēng)格


嵌套navigator.gif
  • 創(chuàng)建方法

const TabNav = TabNavigator(TabRouteConfig, TabNavigatorConfig)
//把創(chuàng)建的tab視圖作為screen添加到stack視圖即可
const StackRouteConfig = {
    Tab: {
        screen: TabNav
    },
    Fourth: {
        screen: Page1,
        navigationOptions: screenConfig
    },
    Fiveth: {
        screen: Page2,
        navigationOptions: screenConfig
    }
}
const StackNav = StackNavigator(StackRouteConfig, StackNavigatorConfig)

export default class RootPage extends BaseComponent {

    render() {
        return (
            <StackNav/>
        )
    }
}
  • 嵌套視圖的跳轉(zhuǎn)

如果嵌套視圖中有重名路由B咙俩,那么當(dāng)前頁A跳轉(zhuǎn)到B時耿戚,會按就近原則選擇B頁面
比如

const TabRouteConfig = {
    First: {
        screen: Tab1,
    },
    Second: {
        screen: Tab2
    },
    Third: {
        screen: Tab3
    }
}
const StackRouteConfig = {
    Tab: {
        screen: TabNav
    },
    Third: {
        screen: Page1,
        navigationOptions: screenConfig
    },
    Fourth: {
        screen: Page2,
        navigationOptions: screenConfig
    }
}

可以看到tab視圖中的Tab2頁面和stack視圖中的Page1頁面路由重名,那么

  • 在Tab2中進行頁面跳轉(zhuǎn) 結(jié)果是切換到Tab3而不是跳轉(zhuǎn)到Page1
this.props.navigation.navigate('Third',{});
  • 在Page2中進行頁面跳轉(zhuǎn) 結(jié)果是跳轉(zhuǎn)到Page1而不是切換到Tab3
this.props.navigation.navigate('Third',{})阿趁;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膜蛔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子脖阵,更是在濱河造成了極大的恐慌皂股,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件命黔,死亡現(xiàn)場離奇詭異呜呐,居然都是意外死亡,警方通過查閱死者的電腦和手機悍募,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門蘑辑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坠宴,你說我怎么就攤上這事洋魂。” “怎么了喜鼓?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵副砍,是天一觀的道長。 經(jīng)常有香客問我庄岖,道長豁翎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任隅忿,我火速辦了婚禮谨垃,結(jié)果婚禮上启搂,老公的妹妹穿的比我還像新娘。我一直安慰自己刘陶,他們只是感情好胳赌,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匙隔,像睡著了一般疑苫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纷责,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天捍掺,我揣著相機與錄音,去河邊找鬼再膳。 笑死挺勿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的喂柒。 我是一名探鬼主播不瓶,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灾杰!你這毒婦竟也來了蚊丐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤艳吠,失蹤者是張志新(化名)和其女友劉穎麦备,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昭娩,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡凛篙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了栏渺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呛梆。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖迈嘹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情全庸,我是刑警寧澤秀仲,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站壶笼,受9級特大地震影響神僵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜覆劈,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一保礼、第九天 我趴在偏房一處隱蔽的房頂上張望沛励。 院中可真熱鬧,春花似錦炮障、人聲如沸目派。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽企蹭。三九已至,卻和暖如春智末,著一層夾襖步出監(jiān)牢的瞬間谅摄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工系馆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留送漠,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓由蘑,卻偏偏與公主長得像闽寡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纵穿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容