ReactNative從零開(kāi)始筆記6-導(dǎo)航頁(yè)面?zhèn)髦担ㄕ齻骱湍鎮(zhèn)鳎?/h1>

一、使用環(huán)境

  • Mac 電腦 系統(tǒng)10.14.2
  • Xcode9.4
  • react-native-cli版本 2.0.1
  • react-native: 0.57.3
  • webstorm

二、導(dǎo)航使用

雖然系統(tǒng)有Navigator可以用,但是0.44版本后就不在推薦使用,而是讓我們使用第三方導(dǎo)航組件react-native-deprecated-custom-components

注意:從0.44版本開(kāi)始嫩码,Navigator被從react native的核心組件庫(kù)中剝離到了一個(gè)名為react-native-deprecated-custom-components的單獨(dú)模塊中,而且官方推薦使用React Navigation導(dǎo)航組件,這個(gè)已經(jīng)默認(rèn)為官方推薦了

所有本文介紹的也是react-native-deprecated-custom-components

1讯沈、既然是使用第三方組件,所以第一步就是安裝組件

 npm install react-native-deprecated-custom-components  --save

2婿奔、在使用導(dǎo)航組件的地方導(dǎo)入組件

import {Navigator} from 'react-native-deprecated-custom-components'

3缺狠、配置導(dǎo)航組件主要使用三個(gè)屬性

  • initialRoute
  • configureScene
  • renderScene

3.1 initialRoute:我也不用貼出官方的英文,我直接說(shuō)中文理解為用于初始化路由

  initialRoute:其參數(shù)對(duì)象中的各個(gè)屬性如下:
  {
    component: function, //加載的視圖組件
    title: string, //加載視圖的標(biāo)題
    passPros: object, //傳遞的數(shù)據(jù)
    backButtonIcon: Image.propTypes.source, // 后退按鈕圖標(biāo)
    backButtonTitle: string, //后退按鈕標(biāo)題
    leftButtonIcon: Image.propTypes.soruce, // 左側(cè)按鈕圖標(biāo)
    leftButtonTitle: string, //左側(cè)按鈕標(biāo)題
    onLeftButtonPress: function, //左側(cè)按鈕點(diǎn)擊事件
    rightButtonIcon: Image.propTypes.soruce, // 右側(cè)按鈕圖標(biāo)
    rightButtonTitle: string, //右側(cè)按鈕標(biāo)題
    onRightButtonPress: function, //右側(cè)按鈕點(diǎn)擊事件
}
  1. configureScene: configureScene(route, routeStack)這個(gè)函數(shù)是optional可選屬性萍摊,用來(lái)處理場(chǎng)景的動(dòng)畫(huà)和手勢(shì)挤茄。它會(huì)要求兩個(gè)參數(shù)route和routestack,route如同renderScene中的route一樣是將要處理的界面的路由冰木,routestack則是界面跳轉(zhuǎn)關(guān)系的集合穷劈, 配置場(chǎng)景跳轉(zhuǎn)方向

(route, routeStack) => Navigator.SceneConfigs.FloatFromRight

設(shè)置跳轉(zhuǎn)方向
 *  - Navigator.SceneConfigs.PushFromRight (default) 默認(rèn)
 *  - Navigator.SceneConfigs.FloatFromRight
 *  - Navigator.SceneConfigs.FloatFromLeft
 *  - Navigator.SceneConfigs.FloatFromBottom
 *  - Navigator.SceneConfigs.FloatFromBottomAndroid
 *  - Navigator.SceneConfigs.FadeAndroid
 *  - Navigator.SceneConfigs.SwipeFromLeft
 *  - Navigator.SceneConfigs.HorizontalSwipeJump
 *  - Navigator.SceneConfigs.HorizontalSwipeJumpFromRight
 *  - Navigator.SceneConfigs.HorizontalSwipeJumpFromLeft
 *  - Navigator.SceneConfigs.VerticalUpSwipeJump
 *  - Navigator.SceneConfigs.VerticalDownSwipeJump

3.renderScene:渲染參數(shù)renderScene(route, navigator),設(shè)置導(dǎo)航條跳轉(zhuǎn)參數(shù)

本文使用代碼

render() {
return (
  <View style={styles.container}>
      <Navigator
          initialRoute={{
          name: '首頁(yè)',
          component:Home
          }}
          configureScene={
              (route) => {
                  return ({
                      ...Navigator.SceneConfigs.PushFromRight,
                      gestures: null,
                  });
              }
          }
           //導(dǎo)航條跳轉(zhuǎn)傳遞參數(shù)
          renderScene={
          (route, navigator) => {
              let Component = route.component;
              // 沒(méi)有參數(shù)
              // return <Component navigator={navigator} />
              // 有參數(shù)
              return <Component {...route.params} navigator={navigator} />
          }
         }>
      </Navigator>
  </View>
);

}

4踊沸、使用導(dǎo)航實(shí)現(xiàn)功能
主頁(yè)點(diǎn)擊--->詳情(主頁(yè)送一只玫瑰花給詳情)玫瑰花是正向傳值的參數(shù)==========正向傳值
詳情點(diǎn)擊--->主頁(yè)(詳情送一盒巧克力給主頁(yè))歇终,巧克力是逆向傳值的參數(shù)=========逆向傳值

A、主頁(yè)代碼

export  default class Home extends Component{
 // 初始化方法
 constructor(props){
     super(props);
     this.state = {
       currentMessage: '原始值' //定義屬性
     }
 }
 gotoHomeDetail(){
     // 這里保存一下是為了防止后續(xù)事件操作的時(shí)候this的執(zhí)行改變
     let _this = this;
   //  使用push 方法跳轉(zhuǎn)雕沿,里面是參數(shù)
     this.props.navigator.push({
         component: HomeDetail,
         params: {
             name: '主頁(yè)送的一支玫瑰花',  //正向傳值參數(shù)
             onCallBack: function (message) { //逆?zhèn)髦到邮芎瘮?shù)
                 _this.setState({currentMessage: message});
             }
         }
     })
 }
 render(){
     return (
         <View style={styles.container}>
             <Text style={styles.text}>我是主頁(yè)</Text>
             <Text style={styles.detailText}
                   onPress={()=>{
                       // 點(diǎn)擊調(diào)用導(dǎo)航跳轉(zhuǎn)
                       this.gotoHomeDetail();
                   }}
             >點(diǎn)擊送詳情一枝花</Text>
             <Text style={styles.callBackText}>回調(diào):{this.state.currentMessage}</Text>
         </View>
     )
    }
}

B 练湿、詳情代碼

export default class HomeDetail extends Component{
// 初始化方法
constructor(props){
    super(props);
}
//跳轉(zhuǎn)返回頁(yè)面
gotoPopHomePage= () =>{
    // 獲取導(dǎo)航
    const {navigator} = this.props;
    // 逆?zhèn)鲄?shù)
    this.props.onCallBack('詳情送的巧克力');
    // 調(diào)用pop 返回
    if(navigator){
        navigator.pop();
    }
}
render(){
    return (
        <View style={styles.container}>
            <Text style={styles.text}>我是詳情</Text>
            <Text style={styles.text}>我收到主頁(yè)傳值:{this.props.name}</Text>
            <Text style={styles.callBackText}
                  {/*點(diǎn)擊調(diào)用返回導(dǎo)航方法*/}
                  onPress={this.gotoPopHomePage}>
                回調(diào)主頁(yè)巧克力</Text>
        </View>
    )
   }
}

效果圖


122133.gif

其他資料
ReactNative從零開(kāi)始筆記1-初始化項(xiàng)目
ReactNative從零開(kāi)始筆記2-組件的生命周期
ReactNative從零開(kāi)始筆記3-state(狀態(tài))與props(屬性)
ReactNative從零開(kāi)始筆記4-PropTypes使用
ReactNative從零開(kāi)始筆記5-組件傳值(父子組件/兄弟組件)
ReactNative從零開(kāi)始筆記6-導(dǎo)航頁(yè)面?zhèn)髦担ㄕ齻骱湍鎮(zhèn)鳎?/a>

  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市审轮,隨后出現(xiàn)的幾起案子肥哎,更是在濱河造成了極大的恐慌辽俗,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篡诽,死亡現(xiàn)場(chǎng)離奇詭異崖飘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)杈女,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)朱浴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人达椰,你說(shuō)我怎么就攤上這事翰蠢。” “怎么了啰劲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵梁沧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蝇裤,道長(zhǎng)廷支,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任栓辜,我火速辦了婚禮恋拍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘藕甩。我一直安慰自己施敢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布辛萍。 她就那樣靜靜地躺著悯姊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贩毕。 梳的紋絲不亂的頭發(fā)上悯许,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音辉阶,去河邊找鬼先壕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谆甜,可吹牛的內(nèi)容都是我干的垃僚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼规辱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼谆棺!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起罕袋,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤改淑,失蹤者是張志新(化名)和其女友劉穎碍岔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體朵夏,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔼啦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仰猖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捏肢。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖饥侵,靈堂內(nèi)的尸體忽然破棺而出鸵赫,到底是詐尸還是另有隱情,我是刑警寧澤爆捞,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布奉瘤,位于F島的核電站,受9級(jí)特大地震影響煮甥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜藕赞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一成肘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斧蜕,春花似錦双霍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至均芽,卻和暖如春丘逸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掀宋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工深纲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人劲妙。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓湃鹊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親镣奋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子币呵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

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