本文基于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: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---------------------------------------------------------------  

上有天堂,下有书房。

React Native学习(四)—— 写一个公用组件(头部)的更多相关文章

  1. 深入浅出React Native 3: 从零开始写一个Hello World

    这是深入浅出React Native的第三篇文章. 1. 环境配置 2. 我的第一个应用 将index.ios.js中的代码全部删掉,为什么要删掉呢?因为我们准备从零开始写一个应用~学习技术最好的方式 ...

  2. React Native学习-调取摄像头第三方组件:react-native-image-picker

    近期做的软件中图片处理是重点,那么自然也就用到了相机照相或者相册选取照片的功能. react-native中有image-picker这个第三方组件,但是0.18.10这个版本还不是太支持iPad. ...

  3. iOS、swift、React Native学习常用的社区、论坛

    <!----iOS> <!----Swift>*IOS开发常用社区:http://code4app.com/ *IOS开发常用社区:http://www.cocoachina. ...

  4. React Native 学习笔记--进阶(二)--动画

    React Native 进阶(二)–动画 动画 流畅.有意义的动画对于移动应用用户体验来说是非常必要的.我们可以联合使用两个互补的系统:用于全局的布局动画LayoutAnimation,和用于创建更 ...

  5. react native 学习一(环境搭配和常见错误的解决)

    react native 学习一(环境搭配) 首页,按照http://reactnative.cn/docs/0.30/getting-started.html#content上的介绍,下载安装pyt ...

  6. React Native 学习-01

    React Native 学习 (学习版本 0.39) 一.环境配置 二.IDE选择 webstorm 1.webstorm配置 ①.首先是可以选择使用汉化包汉化.eu68 ②.安装插件和外部库. 由 ...

  7. 基于React Native的Material Design风格的组件库 MRN

    基于React Native的Material Design风格的组件库.(为了平台统一体验,目前只打算支持安卓) 官方网站 http://mrn.js.org/ Github https://git ...

  8. 写一个vue组件

    写一个vue组件 我下面写的是以.vue结尾的单文件组件的写法,是基于webpack构建的项目.如果还不知道怎么用webpack构建一个vue的工程的,可以移步到vue-cli. 一个完整的vue组件 ...

  9. React Native 学习资料

    React Native 学习资料 学习资料 网址 React Native中文网 https://reactnative.cn/

随机推荐

  1. VS源码编译QuaZip(Windows下)

    最近写个Qt demo,想要使用压缩和解压多个文件的功能,并不使用额外进程.网上参考了很多资料,发现只有QuaZip比较适合我的需求.但是QuaZip只提供源码,因此需要自己来编译. QuaZip简介 ...

  2. 598. Range Addition II

    Given an m * n matrixMinitialized with all0's and several update operations. Operations are represen ...

  3. Xamarin android CardView的使用详解

    android 5.0新增加的一个控件CardView,在support v7兼容包中,意思就是卡片View,虽然可以设置阴影,圆角等等样式,但是我们也可以自己写出来,谷歌工程师之所以出这个,肯定是帮 ...

  4. Wamp环境搭建常见错误问题解决

    第一点.对于apache + php + mysql 的版本的正确选择 问题:网上有些教学视频已经很早了,然后很多人照着来,完全和视频里讲的一样,但是结果就是搭建不成功. 出现问题原因:三件套的版本选 ...

  5. lesson - 9 课程笔记

    一. yum          作用:                     yum 命令是在Fedora 和RedHat 以及SUSE 中基于rpm 的软件包管理器,它可以使系统管理人员交互和自动 ...

  6. flask_restful 学习笔记

    from flask import Flask,make_response,jsonify,request,url_for,g from flask_restful import reqparse, ...

  7. 初学Python之 布尔类型

    与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and True # ==> True True and False # ==> False False an ...

  8. Python核心编程笔记--动态属性

    一.动态语言与静态语言 1.1 静态语言特点: a. 在定义变量时需要指定变量的类型,根据指定的类型来确定变量所占的内存空间 b. 需要经过编译才能运行 c. 在代码编译后,运行过程不能对代码进行操作 ...

  9. EditTable-V1.0--续集

    上一个功能有点少,这个V1.0版本是最小集合的. ================================= 双击单元格编辑,可以添加,删除单元格.并且保持相邻单元格不同的背景色. 引用了“M ...

  10. H2Engine游戏服务器设计之属性管理器

    游戏服务器设计之属性管理器 游戏中角色拥有的属性值很多,运营多年的游戏,往往会有很多个成长线,每个属性都有可能被N个成长线模块增减数值.举例当角色戴上武器时候hp+100点,卸下武器时HP-100点, ...