ReactNative从零开始笔记6-导航页面传值(正传和逆传)

一、使用环境

  • Mac 电脑 系统10.14.2
  • Xcode9.4
  • react-native-cli版本 2.0.1
  • react-native: 0.57.3
  • webstorm

二、导航使用

虽然系统有Navigator可以用,但是0.44版本后就不在推荐使用,而是让我们使用第三方导航组件react-native-deprecated-custom-components

注意:从0.44版本开始,Navigator被从react native的核心组件库中剥离到了一个名为react-native-deprecated-custom-components的单独模块中,而且官方推荐使用React Navigation导航组件,这个已经默认为官方推荐了

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

1、既然是使用第三方组件,所以第一步就是安装组件

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

2、在使用导航组件的地方导入组件

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

3、配置导航组件主要使用三个属性

  • initialRoute
  • configureScene
  • renderScene

3.1 initialRoute:我也不用贴出官方的英文,我直接说中文理解为用于初始化路由

  initialRoute:其参数对象中的各个属性如下:
  {
    component: function, //加载的视图组件
    title: string, //加载视图的标题
    passPros: object, //传递的数据
    backButtonIcon: Image.propTypes.source, // 后退按钮图标
    backButtonTitle: string, //后退按钮标题
    leftButtonIcon: Image.propTypes.soruce, // 左侧按钮图标
    leftButtonTitle: string, //左侧按钮标题
    onLeftButtonPress: function, //左侧按钮点击事件
    rightButtonIcon: Image.propTypes.soruce, // 右侧按钮图标
    rightButtonTitle: string, //右侧按钮标题
    onRightButtonPress: function, //右侧按钮点击事件
}
  1. configureScene: configureScene(route, routeStack)这个函数是optional可选属性,用来处理场景的动画和手势。它会要求两个参数route和routestack,route如同renderScene中的route一样是将要处理的界面的路由,routestack则是界面跳转关系的集合, 配置场景跳转方向

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

设置跳转方向
 *  - Navigator.SceneConfigs.PushFromRight (default) 默认
 *  - 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:渲染参数renderScene(route, navigator),设置导航条跳转参数

本文使用代码

render() {
return (
  <View style={styles.container}>
      <Navigator
          initialRoute={{
          name: '首页',
          component:Home
          }}
          configureScene={
              (route) => {
                  return ({
                      ...Navigator.SceneConfigs.PushFromRight,
                      gestures: null,
                  });
              }
          }
           //导航条跳转传递参数
          renderScene={
          (route, navigator) => {
              let Component = route.component;
              // 没有参数
              // return <Component navigator={navigator} />
              // 有参数
              return <Component {...route.params} navigator={navigator} />
          }
         }>
      </Navigator>
  </View>
);

}

4、使用导航实现功能
主页点击--->详情(主页送一只玫瑰花给详情)玫瑰花是正向传值的参数==========正向传值
详情点击--->主页(详情送一盒巧克力给主页),巧克力是逆向传值的参数=========逆向传值

A、主页代码

export  default class Home extends Component{
 // 初始化方法
 constructor(props){
     super(props);
     this.state = {
       currentMessage: '原始值' //定义属性
     }
 }
 gotoHomeDetail(){
     // 这里保存一下是为了防止后续事件操作的时候this的执行改变
     let _this = this;
   //  使用push 方法跳转,里面是参数
     this.props.navigator.push({
         component: HomeDetail,
         params: {
             name: '主页送的一支玫瑰花',  //正向传值参数
             onCallBack: function (message) { //逆传值接受函数
                 _this.setState({currentMessage: message});
             }
         }
     })
 }
 render(){
     return (
         <View style={styles.container}>
             <Text style={styles.text}>我是主页</Text>
             <Text style={styles.detailText}
                   onPress={()=>{
                       // 点击调用导航跳转
                       this.gotoHomeDetail();
                   }}
             >点击送详情一枝花</Text>
             <Text style={styles.callBackText}>回调:{this.state.currentMessage}</Text>
         </View>
     )
    }
}

B 、详情代码

export default class HomeDetail extends Component{
// 初始化方法
constructor(props){
    super(props);
}
//跳转返回页面
gotoPopHomePage= () =>{
    // 获取导航
    const {navigator} = this.props;
    // 逆传参数
    this.props.onCallBack('详情送的巧克力');
    // 调用pop 返回
    if(navigator){
        navigator.pop();
    }
}
render(){
    return (
        <View style={styles.container}>
            <Text style={styles.text}>我是详情</Text>
            <Text style={styles.text}>我收到主页传值:{this.props.name}</Text>
            <Text style={styles.callBackText}
                  {/*点击调用返回导航方法*/}
                  onPress={this.gotoPopHomePage}>
                回调主页巧克力</Text>
        </View>
    )
   }
}

效果图


122133.gif

其他资料
ReactNative从零开始笔记1-初始化项目
ReactNative从零开始笔记2-组件的生命周期
ReactNative从零开始笔记3-state(状态)与props(属性)
ReactNative从零开始笔记4-PropTypes使用
ReactNative从零开始笔记5-组件传值(父子组件/兄弟组件)
ReactNative从零开始笔记6-导航页面传值(正传和逆传)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容