React Native学习笔记(3)--NavigatorIOS组件

前端之家收集整理的这篇文章主要介绍了React Native学习笔记(3)--NavigatorIOS组件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本篇是在学习《React Native入门与实战》这本书时做的笔记,代码基于ES6实现的,算是对该书中代码的小小更新。

NavigatorIOS是一个iOS平台的组件,一般在有二级页面的场景下使用,如:列表->详情。它是一种堆栈模式,即push压栈,pop出栈。

NavigatorIOS组件为默认的路由提供了initialRoute属性包括component(需要加载的组件视图),title等必要属性,我们也可以添加左边按钮、右边按钮、设置导航栏背景及文字颜色等。路由代表一个页面组件,写component属性绑定。

这里我们要实现的功能就是,点击列表项,然后将该值传到下一个页面展示。

列表页

详情页:

这里我们为路由设置对应的组件List,标题为:’邮轮’,并设置右侧按钮文字为’分享’。最终自定义NavigatorIOS组件如下:

1、自定义NavigatorIOS组件

export default class NavigatorIOSApp extends Component {
  render() {
    return (
      <NavigatorIOS
        initialRoute={{
          component: List,title: '邮轮',rightButtonTitle: '分享'
        }}
        barTintColor="darkslateblue"
        titleTextColor="rgba(255,255,0.8)"
        tintColor="rgba(255,0.8)"
        style={{flex: @H_404_49@1}}
      />
    );
  }
}

2、列表组件的实现

class List extends Component {
  //方法一:由next参数决定,要跳转到哪个组件,标题等其他属性。next参数依赖于render()方法中的next变量
  _goto(next) {
    this.props.navigator.push(next);
  }

  //方法二: 具体参数写死在push中, 这里的title参数,是给Detail组件传值的。
  _goto2(title) {
    this.props.navigator.push({
          component: Detail,title: '详情',passProps: { myProp: 'bar',params: title },rightButtonTitle: "购物车",onRightButtonPress: function() {
            alert("进入购物车");
          }
    });
  }

  show(title) {
    alert(title);
  }

  render() {
    // const next = {
    // component: Detail,
    // title: '详情',
    // passProps: { myProp: 'bar' }
    // };
    // 每个条目除了文本不一样,其它都一样,所以我们将内容放到数组中,然后通过for遍历后,传给每个View。
    var list = ['* 豪华邮轮济州岛3日游','* 豪华邮轮台湾8日游','* 豪华邮轮地中海13日游'];
    var texts = [];
    for (var item of list) {
      var text = (
         // 这种方式不会跳转,只是在当前页面弹出对话框
        // <Text style={styles.list_item} key={item} onPress={this.show.bind(this,item)}>{item}</Text>
        //方法一中的跳转写法,与方法二写法一样
        // <Text style={ styles.list_item } key={ item } onPress={ ()=>this._goto(next) }>{item}</Text>

        //<Text style={ styles.list_item } key={ item } onPress={ ()=>this._goto2(item) }>{item}</Text>
      );

      //将实例化的对象放到texts数组中
      texts.push(text);
    }

    return (
      <ScrollView>
        // 方法一:直接将要展示的组件写在ScrollView中,有多少写多少条
        {/* <Text style={styles.list_item} onPress={()=>this._goto(next)}>* 豪华邮轮济州岛3日游</Text> <Text style={styles.list_item} onPress={()=>this._goto(next)}>* 豪华邮轮台湾8日游</Text> <Text style={styles.list_item} onPress={()=>this._goto(next)}>* 豪华邮轮地中海13日游</Text> */}
        // 方法二:我们将所有的条目放到数组中,这种方式是不是更清晰些?
        {texts}
      </ScrollView>
    );
  }
}

注意:这里的render()方法中,next变量,与ScrollView组件中注释的代码,这是两种写法。

3、Detail组件的实现

我们在_goto2()方法中,设置push后的组件为Detail,并且设置右则按钮,点击它后会弹出对话框。Detail代码如下:

class Detail extends Component {
  render() {
    return (
      <ScrollView>
        <Text style={{marginTop: @H_404_49@200,alignSelf: 'center',backgroundColor: 'red'}}>您选择的是:{this.props.params}</Text>
      </ScrollView>
    );
  }
}

在Detail组件中,我们通过this.props.params属性接收List传过来的参数。

4、注册并使用NavigatorIOSApp组件

class Nav extends Component {
  render() {
    return (
      <View style={styles2.flex}>
        <NavigatorIOSApp></NavigatorIOSApp>
      </View>
    );
  }
}

styles2 = StyleSheet.create({
  flex: {
    flex: @H_404_49@1
  }
});

AppRegistry.registerComponent('demo01',() => Nav);

这里可以直接使用NavigatorIOSApp组件:

AppRegistry.registerComponent('demo01',() => NavigatorIOSApp);

猜你在找的React相关文章