ReactNative 基礎(chǔ)篇 - 頁面跳轉(zhuǎn) (Navigator)

ReactNative 頁面跳轉(zhuǎn)的功能著實(shí)坑了我兩天 . 今天終于調(diào)試好了 , 在此分享一下 . 學(xué)習(xí)新技術(shù)我一貫喜歡 先實(shí)踐后理論 , 所以理論上可能說的不會很全面 . 但是代碼肯定好使 !


關(guān)于基礎(chǔ)的理論部分 , 在此推薦幾篇文章 .

React/React Native 的ES5 ES6寫法對照表

首先在index.ios.js里面注冊Navigator 控件。
并指定默認(rèn)頁面為 FirstPageComponent .

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Navigator

} from 'react-native';

import FirstPageComponent from './FirstPageComponent';

export default class HelloWorld extends React.Component {

render() {

    let defaultName = 'FirstPageName';
    let defaultComponent = FirstPageComponent;

    return (
      <Navigator  
            initialRoute={{ name: defaultName, component: defaultComponent }}  
            configureScene={(route) => {  
            return Navigator.SceneConfigs.FloatFromRight;  
        }}  
        renderScene={(route, navigator) => {  
            let Component = route.component;  
            return <Component {...route.params} navigator={navigator} />  
      }}/>
    );
  }
}

AppRegistry.registerComponent('HelloWorld', () => HelloWorld);

FirstPageComponent.js
獲取到 navigator 對象 , 并navigator.push 到下一頁面.

import React from 'react';
import {
    StyleSheet,
    View,
    Text,
    Navigator,
    TouchableOpacity
} from 'react-native';

import SecondPageComponent from './SecondPageComponent';

export default class FirstPageComponent extends React.Component {

    _pressButton() {
        let _this = this;
        const { navigator } = this.props;
    //為什么這里可以取得 props.navigator?請看上文:
    //<Component {...route.params} navigator={navigator} />
    //這里傳遞了navigator作為props
        if(navigator) {
            navigator.push({
                name: 'SecondPageComponent',
                component: SecondPageComponent
            });
        }
    }

    render() {
        return(
           <View style={styles.container}>
                <TouchableOpacity  style={styles.button}
                onPress={this._pressButton.bind(this)}>

                   <Text style={{color:'white'}}>跳轉(zhuǎn)到下一頁面</Text>
                </TouchableOpacity>
            </View>
        );
    }
}


const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },

  button:{
    width : 200,
    height : 40,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor : '#707070',
  }, 

});

SecondPageComponent.js
獲取到 navigator 對象, 并 navigator.pop 返回上一頁面

import React from 'react';
import {
    View,
    Navigator,
    Text,
    TouchableOpacity,
    StyleSheet
} from 'react-native';

import FirstPageComponent from './FirstPageComponent';

export default class SecondPageComponent extends React.Component {

    _pressButton() {
       const { navigator } = this.props;

       if(navigator) {
          //出棧,返回到上一頁
          navigator.pop();
       }
    }

    render() {
      return(
          <View style={styles.container}>
             <TouchableOpacity  style={styles.button}
                onPress={this._pressButton.bind(this)}>

                  <Text style={{color:'white'}}>返回上一頁</Text>
             </TouchableOpacity>
          </View>
      );
    }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#DEB887',
  },
  button:{
    width : 200,
    height : 40,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor : '#707070',
  },

});

效果圖


效果圖.gif

頁面間傳值

第一頁 向 第二頁傳值 最常用的做法就是 屬性傳值.
第二頁 向 第一頁傳值 用方法回調(diào) .

FirstPageComponent.js

_pressButton() {
    let _this = this;
    const { navigator } = this.props;

    //為什么這里可以取得 props.navigator?請看上文:
    //<Component {...route.params} navigator={navigator} />
    //這里傳遞了navigator作為props
    if(navigator) {
       navigator.push({
          name: 'SecondPageComponent',
          component: SecondPageComponent,

    //這里多出了一個(gè) params 其實(shí)來自于<Navigator 里的一個(gè)方法的參數(shù)...
    //routes.params 里的每個(gè)key 作為props的一個(gè)屬性:
    //這里的 params.id 就變成了 <Navigator id={} 傳遞給了下一個(gè)頁面
          params: {
              id: this.state.id,
              //回調(diào)!從SecondPageComponent獲取user
              getUser: function(user) {
                  _this.setState({
                     user: user
                  })
              }
           }
       });
    }
}

SecondPageComponent.js

const USER_MODELS = {
    1: { name: '張三', age: 23 },
    2: { name: '李四', age: 25 }
};

_pressButton() {
   const { navigator } = this.props;

   if(this.props.getUser) {
      let user = USER_MODELS[this.props.id];
      //回調(diào)傳值給上個(gè)頁面
      this.props.getUser(user);
   }

   if(navigator) {
    //出棧芯杀,返回到上一頁
       navigator.pop();
   }
}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纲刀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子均蜜,更是在濱河造成了極大的恐慌李剖,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囤耳,死亡現(xiàn)場離奇詭異篙顺,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)充择,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門德玫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人椎麦,你說我怎么就攤上這事宰僧。” “怎么了观挎?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵琴儿,是天一觀的道長段化。 經(jīng)常有香客問我,道長造成,這世上最難降的妖魔是什么显熏? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮晒屎,結(jié)果婚禮上佃延,老公的妹妹穿的比我還像新娘。我一直安慰自己夷磕,他們只是感情好履肃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坐桩,像睡著了一般尺棋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绵跷,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天膘螟,我揣著相機(jī)與錄音,去河邊找鬼碾局。 笑死荆残,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的净当。 我是一名探鬼主播内斯,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼像啼!你這毒婦竟也來了俘闯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忽冻,失蹤者是張志新(化名)和其女友劉穎真朗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僧诚,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遮婶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了湖笨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旗扑。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赶么,靈堂內(nèi)的尸體忽然破棺而出肩豁,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布清钥,位于F島的核電站琼锋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏祟昭。R本人自食惡果不足惜缕坎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望篡悟。 院中可真熱鬧谜叹,春花似錦、人聲如沸搬葬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽急凰。三九已至女仰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抡锈,已是汗流浹背疾忍。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留床三,地道東北人一罩。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像撇簿,于是被迫代替她去往敵國和親聂渊。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

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