zoukankan      html  css  js  c++  java
  • React Native学习(四)—— 写一个公用组件(头部)

    本文基于React Native 0.52

    Demo上传到Git了,有需要可以看看,写了新内容会上传的。Git地址 https://github.com/gingerJY/React-Native-Demo

    一、总览

      头部通常分为左、中、右三部分,效果图如下:

     

    二、头部组件

      1、创建components文件夹,新建commonHead.js

      2、commonHead.js

    头部分为左、中、右三块,我们需要提供接口,获取外部传入的值,从而判断哪一块需要创建。

    static propTypes = {
       leftItem: PropTypes.func,
       titleItem: PropTypes.func,
       rightItem: PropTypes.func,
    };
    

      左侧模块(中和右一样)

    renderLeftItem(){
         if (this.props.leftItem === undefined) return;
         return this.props.leftItem();
    }
    

      样式,设置了一些默认样式和布局,也可以通过 navBarStyle 添加样式或是覆盖默认样式

        render() {
            return (
                <View style={[{width,
                    height:40,
                    backgroundColor: this.props.navBarColor || '#fff',//背景色,默认白色
                    flexDirection:'row',//横向排
                    justifyContent:'space-between',//主轴对齐方式
                    alignItems: 'center',//次轴对齐方式(上下居中)
                    borderBottomWidth: this.props.borderBottomWidth || 0,//是否有下边框
                    borderColor: this.props.borderColor || '#ccc',
                }, this.props.navBarStyle,]}>
                    
                    <View>
                        {this.renderLeftItem()}
                    </View>
                    <View>
                        {this.renderTitleItem()}
                    </View>
                    <View>
                        {this.renderRightItem()}
                    </View>
                </View>
            );
        }
    

    commonHead.js完整代码 https://github.com/gingerJY/example/blob/master/RN_commonHead/commonHead.js

    三、使用组件

      1、在home.js中引入头部组件

    import CommonHead from '../../components/commonHead';
    

      2、写左中右三部分

        // 头部左侧
        renderLeftItem() {
            return (
                <TouchableOpacity onPress={() => { this.props.navigation.navigate('Search') }} style={styles.navLeft}>
                    <Image source={require('../../img/scanning.png')} style={styles.navIcon} />
                    <Text style={styles.navText}>扫一扫</Text>
                </TouchableOpacity>
            )
        }
        // 头部中间
        renderTitleItem() {
            return (
                <TouchableOpacity onPress={() => { this.props.navigation.navigate('Search') }}>
                    <View style={styles.searchBox}>
                        <Image source={require('../../img/search.png')} style={styles.searchIcon} />
                        <Text style={styles.searchContent}>搜索商品, 共10161款好物</Text>
                    </View>
                </TouchableOpacity>
            )
        }
        // 头部右侧
        renderRightItem() {
            return (
                <TouchableOpacity onPress={() => { this.props.navigation.navigate('MessageCenter') }} style={styles.navRight}>
                    <Image source={require('../../img/remind.png')} style={styles.navIcon} />
                    <Text style={styles.navText}>消息</Text>
                </TouchableOpacity>
            )
        }
    

      3、使用commonHead

    <CommonHead
          leftItem={() => this.renderLeftItem()}
          titleItem={() => this.renderTitleItem()}
          rightItem={() => this.renderRightItem()}
    />
    

      home.js完整代码 https://github.com/gingerJY/example/blob/master/RN_commonHead/home.js

    注:上面的代码有些内容,如样式等没有写到,点链接可以看到完整代码,文章开头那个git地址是整个项目的代码。

    另:图标来自 http://www.iconfont.cn/

    END---------------------------------------------------------------  

    上有天堂,下有书房。

  • 相关阅读:
    Ubuntu 中软件的安装、卸载以及查看的方法总结
    无锁队列的环形数组实现
    Geodatabase模型
    地图投影与ArcGIS坐标系转换
    ARCGIS动态画点
    ArcEngine数据删除几种方法和性能比较
    AE开发技术文档--8种数据访问方法
    Hibernate 的HQL和sql有什么区别
    ActionContextCleanUp作用
    Hibernate延迟加载与opensessioninviewFilter
  • 原文地址:https://www.cnblogs.com/MaiJiangDou/p/8329984.html
Copyright © 2011-2022 走看看