本文基于React Native 0.52

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

一、总览

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

二、头部组件

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

  2、commonHead.js

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

  1. static propTypes = {
  2. leftItem: PropTypes.func,
  3. titleItem: PropTypes.func,
  4. rightItem: PropTypes.func,
  5. };

  左侧模块(中和右一样)

  1. renderLeftItem(){
  2. if (this.props.leftItem === undefined) return;
  3. return this.props.leftItem();
  4. }

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

  1. render() {
  2. return (
  3. <View style={[{width:width,
  4. height:40,
  5. backgroundColor: this.props.navBarColor || '#fff',//背景色,默认白色
  6. flexDirection:'row',//横向排
  7. justifyContent:'space-between',//主轴对齐方式
  8. alignItems: 'center',//次轴对齐方式(上下居中)
  9. borderBottomWidth: this.props.borderBottomWidth || 0,//是否有下边框
  10. borderColor: this.props.borderColor || '#ccc',
  11. }, this.props.navBarStyle,]}>
  12.  
  13. <View>
  14. {this.renderLeftItem()}
  15. </View>
  16. <View>
  17. {this.renderTitleItem()}
  18. </View>
  19. <View>
  20. {this.renderRightItem()}
  21. </View>
  22. </View>
  23. );
  24. }

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

三、使用组件

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

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

  2、写左中右三部分

  1. // 头部左侧
  2. renderLeftItem() {
  3. return (
  4. <TouchableOpacity onPress={() => { this.props.navigation.navigate('Search') }} style={styles.navLeft}>
  5. <Image source={require('../../img/scanning.png')} style={styles.navIcon} />
  6. <Text style={styles.navText}>扫一扫</Text>
  7. </TouchableOpacity>
  8. )
  9. }
  10. // 头部中间
  11. renderTitleItem() {
  12. return (
  13. <TouchableOpacity onPress={() => { this.props.navigation.navigate('Search') }}>
  14. <View style={styles.searchBox}>
  15. <Image source={require('../../img/search.png')} style={styles.searchIcon} />
  16. <Text style={styles.searchContent}>搜索商品, 10161款好物</Text>
  17. </View>
  18. </TouchableOpacity>
  19. )
  20. }
  21. // 头部右侧
  22. renderRightItem() {
  23. return (
  24. <TouchableOpacity onPress={() => { this.props.navigation.navigate('MessageCenter') }} style={styles.navRight}>
  25. <Image source={require('../../img/remind.png')} style={styles.navIcon} />
  26. <Text style={styles.navText}>消息</Text>
  27. </TouchableOpacity>
  28. )
  29. }

  3、使用commonHead

  1. <CommonHead
  2. leftItem={() => this.renderLeftItem()}
  3. titleItem={() => this.renderTitleItem()}
  4. rightItem={() => this.renderRightItem()}
  5. />

  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. 通过 JS 实现简单的拖拽功能并且可以在特定元素上禁止拖拽

    前言 关于讲解 JS 的拖拽功能的文章数不胜数,我确实没有必要大费周章再写一篇重复的文章来吸引眼球.本文的重点是讲解如何在某些特定的元素上禁止拖拽.这是我在编写插件时遇到的问题,其实很多插件的拖拽功能 ...

  2. ArcGIS API for JavaScript 4.2学习笔记[23] 没有地图如何进行查询?【FindTask类的使用】

    从第一篇到现在都是基于地图的,不管怎么样,不管是2D还是3D,至少有个图. 这次来个没有图的例子,看看纯文字的空间查询是什么样的. 本例适用于后台查询或低性能电脑的查询. 预览图 由于4.3和4.2的 ...

  3. JS画几何图形之五【过圆外一点作切线】

    样例:http://www.zhaojz.com.cn/demo/draw9.html 依赖:[点].[直线].[圆] //画切线 //point 圆外的一点 //dot 圆心 //r 半径 func ...

  4. 字符串MD5加密运算

    public static string GetMd5String(string str)       {           MD5 md5 = MD5.Create();           by ...

  5. shell 踩坑记

    变量赋值时,等号两边不能有空格: 在判断表达式中,不论是 [ -n "$1" ] 还是 [ -f  "$1" ] 都要在变量两侧加上双引号: 在使用与或非判断式 ...

  6. java多线程(四)-自定义线程池

    当我们使用 线程池的时候,可以使用 newCachedThreadPool()或者 newFixedThreadPool(int)等方法,其实我们深入到这些方法里面,就可以看到它们的是实现方式是这样的 ...

  7. Optimize For Ad Hoc Workloads

    --临时工作负载优化   即席查询:也就是查询完没放到Cache当中,每次查询都要重新经过编译,并发高的时候很耗性能: 参数化查询: 一方面解决了重编译问题,但随着数据库数据数据的变更,统计信息的更新 ...

  8. 浅析Python解释器的设计

    从现代编译器的角度看,解释器和编译器的边界已经相当的模糊.我们后面的讨论说到的编译器就是Python的解释器,没有特别说明的指的是CPython的实现. 内存管理(Memory Management) ...

  9. HTML5新特性:元素的classList属性与应用

    在html5新增的classList之前, 操作元素的class用的是className这个属性,而如果要向jquery封装的hasClass, removeClass, addClass, togg ...

  10. IIFF(立即执行函数表达式)

    立即执行函数表达式(Immediately-invoked function expression,IIFF) 在javascript(ES5)中,是没有块级作用域的概念的 for (var i = ...