流水賬式ReactNative實戰(zhàn)一:ReactNavigation

ReactNavigation是react社區(qū)比較流行的導(dǎo)航庫,完全用js編寫拔妥,github地址:
https://github.com/react-navigation/react-navigation
他還有個官方網(wǎng)站:
https://reactnavigation.org/docs/en/hello-react-navigation.html
像我這種初學者當然要看看官網(wǎng)文檔了,按照文檔,先下載依賴庫:

yarn add react-navigation
yarn add react-native-gesture-handler
react-native link react-native-gesture-handler

當然,如果想用npm也行,命令都差不多:

npm install --save react-navigation
npm install --save react-native-gesture-handler
react-native link react-native-gesture-handler

然后扒下了如下代碼肢执,隨便命名為navigation.js放到App.js的同級目錄下:

import React from "react";
import { View, Text } from "react-native";
import { createStackNavigator, createAppContainer } from "react-navigation";

class HomeScreen extends React.Component {
    render() {
        return (
            <View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
                <Text>Home Screen</Text>
            </View>
        );
    }
}

const AppNavigator = createStackNavigator({
    Home: {
        screen: HomeScreen
    }
});

export default createAppContainer(AppNavigator);

這里讓我比較困惑的是最后一句,export類我聽過译红,按他這么寫是個什么玩意预茄?查閱了文檔發(fā)現(xiàn)export不只能導(dǎo)出類,還能導(dǎo)出函數(shù)侦厚、值耻陕、變量等拙徽,同時,一個文件可以有若干個export诗宣,但是export default只能有一個膘怕,后者相當于導(dǎo)出了一個默認變量,沒有名字召庞,你import的時候讓他叫什么他就叫什么岛心,而這里的寫法,其實導(dǎo)出的是一個值篮灼,這個值是它以自己定義的對象AppNavigator為入?yún)⒄{(diào)用react-navigation的函數(shù)createAppContainer后得到的返回值忘古。這個函數(shù)返回的就是一個組件,也就是我們的navigator穿稳。
所以在App.js里存皂,我們可以這么寫:

import React from "react"
import Container from "./navigation.js"
export default class App extends React.Component{
    render(){
        return <Container/>
    }
}

這里需要注意的是,import命令如果目標js在同級目錄逢艘,不能省略"./"旦袋,否則會提示找不到模塊。
按這樣寫完它改,運行后就看到了一個包含導(dǎo)航欄的空頁面疤孕。
但是只有一個頁面好像沒什么用,起碼得能完成跳轉(zhuǎn)啊央拖,于是我又寫了一個頁面:

class MyScreen extends React.Component{
    render(){
        return(
            <View style={{flex: 1, alignItems: "center", justifyContent: "center"}}>
                <Text>My Screen</Text>
            </View>
        )
    }
}

這個頁面的注冊還是放在createStackNavigator里:

const AppNavigator = createStackNavigator({
    Home: {
        screen: HomeScreen
    },
    My: {
        screen: MyScreen
    }
});

然后祭阀,在HomeScreen里加入一個按鈕讓他的點擊事件觸發(fā)跳轉(zhuǎn):

<Button title="Goto MyScreen" onPress={() => this.props.navigation.navigate("My")}/>

運行后發(fā)現(xiàn)點擊按鈕可以完成頁面的跳轉(zhuǎn),新頁面帶有一個返回按鈕鲜戒,這就實現(xiàn)了跟web瀏覽器一樣的功能专控,這種導(dǎo)航內(nèi)部維護了一個存放頁面的棧,后退功能就是通過這個來實現(xiàn)的遏餐。
通過遍歷navigation對象的屬性我們可以看到除了navigation方法之外還有push伦腐、pop、goBack等方法以及state等屬性失都,pop方法跟goBack都是用來返回上一個頁面的柏蘑,push和navigate的區(qū)別是如果你調(diào)用navigate傳入的key對應(yīng)的頁面已經(jīng)在最上層了,他就不會開啟新的頁面粹庞,push則不同咳焚。
navigate和push方法都可以接受傳參,把參數(shù)放入json里作為第二個參數(shù)就可以傳遞給打開的頁面庞溜,在打開的頁面里用navigation.getParam(參數(shù)名)就可以獲取到參數(shù)革半。除此之外,還可以通過navigation.state.params得到參數(shù),如果沒有任何傳參督惰,這個屬性會是null不傅。
以上是stackNavigator部分的使用,tab和模式對話框部分另起一篇文章寫赏胚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市商虐,隨后出現(xiàn)的幾起案子觉阅,更是在濱河造成了極大的恐慌,老刑警劉巖秘车,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件典勇,死亡現(xiàn)場離奇詭異,居然都是意外死亡叮趴,警方通過查閱死者的電腦和手機割笙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眯亦,“玉大人伤溉,你說我怎么就攤上這事∑蘼剩” “怎么了乱顾?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宫静。 經(jīng)常有香客問我走净,道長,這世上最難降的妖魔是什么孤里? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任伏伯,我火速辦了婚禮,結(jié)果婚禮上捌袜,老公的妹妹穿的比我還像新娘说搅。我一直安慰自己,他們只是感情好琢蛤,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布蜓堕。 她就那樣靜靜地躺著,像睡著了一般博其。 火紅的嫁衣襯著肌膚如雪套才。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天慕淡,我揣著相機與錄音背伴,去河邊找鬼。 笑死,一個胖子當著我的面吹牛傻寂,可吹牛的內(nèi)容都是我干的息尺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疾掰,長吁一口氣:“原來是場噩夢啊……” “哼搂誉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起静檬,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤炭懊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拂檩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侮腹,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年稻励,在試婚紗的時候發(fā)現(xiàn)自己被綠了父阻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡望抽,死狀恐怖加矛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情糠聪,我是刑警寧澤荒椭,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站舰蟆,受9級特大地震影響趣惠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜身害,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一味悄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧塌鸯,春花似錦侍瑟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茧球,卻和暖如春庭瑰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抢埋。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工弹灭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留督暂,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓穷吮,卻偏偏與公主長得像逻翁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捡鱼,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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