在开发APP的过程中,我们可能会遇上软件中需要有很多下拉选择样式,就像之前我做的那个《房贷计算器》一样,有很多下拉选择,如果没有将Picker封装起来共用是很麻烦的。

安装插件

在React Native里这个组件叫Picker,目前(React Native0.25.1版本)来说,自带的Picker并不能很好的适应iOS和Android,所以在此借助第三方的插件:react-native-picker

安装插件命令:npm install --save react-native-picker

picker组件

该插件有哪些具体的参数与方法查看官方文档:https://github.com/beefe/react-native-picker

在该js文件中,主要是picker的定义;

picker有show()方法,经过某个触发事件后执行,将picker展示出来给用户进行选择

picker展示时,还需要将当前的值和供选择的值都传值过来

  1. export default class PickerModal extends React.Component {
  2.  
  3. constructor(props) {
  4. super(props);
  5.  
  6. this.state = {
  7. options: [0],
  8. currentOption: 0
  9. }
  10. }
  11.  
  12. show(options, currentOption) {
  13. this.setState({options, currentOption});
  14. this.picker.show();
  15.  
  16. return new Promise(
  17. (resolve, reject)=> {
  18. this.resolve = resolve;
  19. this.reject = reject;
  20. }
  21. );
  22. }
  23.  
  24. render() {
  25. return (
  26. <Picker
  27. ref={(picker)=>{this.picker = picker;}}
  28. style={{position:'absolute', left:0, right:0, bottom:0, height: 270, backgroundColor:'#fff'}}
  29. showMask={true}
  30. pickerBtnText="确定"
  31. pickerCancelBtnText="取消"
  32. pickerBtnStyle={{color:'#000'}}
  33. pickerData={this.state.options}
  34. selectedValue={[this.state.currentOption]}
  35. onPickerDone={(value)=>{ this.picker.hide(); this.resolve && this.resolve(value[0]); }}
  36. onPickerCancel={()=>{ this.picker.hide(); this.reject && this.reject(); }}
  37. />
  38. )
  39. }
  40. }

picker-field组件

该js是 通过接受值来设计样式显示在页面上,当点击后,即可将上述的picker组件展示出来给用户选择;

  1. export default class PickerField extends React.Component {
  2. showPickerModal() {
  3. let { options, value } = this.props;
  4.  
  5. global.pickerModal.show(options, value).then(
  6. (newValue)=> {
  7. this.props.onValueChange(newValue);
  8. },
  9. (e)=> {
  10. console.log(e)
  11. }
  12. )
  13. }
  14.  
  15. render() {
  16. let { title, value } = this.props;
  17.  
  18. return (
  19. <View style={{flex:1}}>
  20. <View
  21. style={{flexDirection:'row', alignItems:'center', height:47, borderBottomWidth:1, borderBottomColor:'#2b3138'}}>
  22. <Text style={{flex:2, fontSize:16, color:'#c9c8c9'}}>{title}</Text>
  23.  
  24. <TouchableOpacity style={{flexDirection:'row', flex:2.1, alignItems:'center'}}
  25. onPress={()=>this.showPickerModal()}>
  26. <Text style={{color:'#50c0ce', fontSize:16}}>{value}</Text>
  27.  
  28. <Text style={{flex:1, textAlign:'right'}}>
  29. <Icon style={{color:'#c9c8c9'}} name="ios-arrow-down" size={26}/>
  30. </Text>
  31. </TouchableOpacity>
  32.  
  33. </View>
  34. </View>
  35. )
  36. }
  37. }

在文件中有一个global.pickerModal,这个是需要我们在一个外层文件或公共文件中定义的:

  1. <PickerModal ref={(pickerModal)=>{global.pickerModal = pickerModal;}}/>

给picker-field组件传值

在需要的位置中将PickerField显示出来:

  1. <PickerField title="计算方式" value={this.state.calMethod}
  2. onValueChange={(value)=>this.setState({calMethod:value})}
  3. options={['贷款金额','住房面积']}/>

具体的显示样式可以在picker-field组件那个js文件中修改,传值不同需要在显示的时候进行属性修改。

Picker组件封装的更多相关文章

  1. picker(级联)组件及组件封装经验

    组件封装的几个经验 a.参数:最佳方式,仅一个object参数,所需要的实际参数,作为对象属性传入. 如此,便于数据的处理和扩展.例如,后期扩展需要增加参数,或者调整参数时,如果使用的对象传入,老的调 ...

  2. Picker 组件的设计与实现

    前言 今天的主题是 Picker 组件的设计与实现,Picker 组件是 NutUI 的一个拾取器组件,它用于显示一系列的值集合,用户可以滚动选择集合中一项,也可以支持多个系列的值集合供用户分别选择. ...

  3. Vuejs 页面的区域化与组件封装

    组件的好处 当我用vue写页面的时候,大量的数据页面渲染,引入组件简化主页面的代码量,当代码区域块代码差不多相同时,组件封装会更加简化代码.组件是Vue.js最强大的功能之一. 组件可以扩展HTML元 ...

  4. ReactNative之从HelloWorld中看环境搭建、组件封装、Props及State

    开篇呢,先给大家问个好,今天是中秋节,祝大家中秋节快乐!!虽然是中秋节,但是木有回家还是总结一下知识点写写博客吧,想着昨天总结一下的,但是昨天和几个同学小聚了一下,酒逢知己总是千杯少呢,喝的微醺不适合 ...

  5. 微信小程序picker组件关于objectArray数据类型绑定

    一.前言: 我发现很多的同学都在抱怨说微信小程序的picker的mode = selector/mode = multiSelector 无法实现Object Array数据类型的绑定,其实很多人就想 ...

  6. 用mint-ui picker组件 实现省市区三级联动

    公司上一期项目中新增了省市区滑动三级联动效果,用的是mint-ui的picker组件和popup组件,效果如下:点击确定换地区,点击取消不变 省市区数据是后台给的(根据上一级的id,获取下一级数据列表 ...

  7. Vue + Element UI 实现权限管理系统 (功能组件封装)

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  8. Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装

    组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度. 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航.头部和主内容三个组 ...

  9. Linux组件封装(五)一个生产者消费者问题示例

    生产者消费者问题是计算机中一类重要的模型,主要描述的是:生产者往缓冲区中放入产品.消费者取走产品.生产者和消费者指的可以是线程也可以是进程. 生产者消费者问题的难点在于: 为了缓冲区数据的安全性,一次 ...

随机推荐

  1. php redis 分布式类

    配置: $redis_config = array( 'prefix' => 'ylmall_', 'master' => array( 'host' => "192.16 ...

  2. Spring4.0+Hibernate4.0+Struts2.3整合包括增删改查案例,解决整合中出现的异常

    源码下载:http://download.csdn.net/detail/cmcc_1234/7034775 ======================Application.xml======== ...

  3. 通过RDB还原用户误删除的邮件

    1.在任意一台邮箱服务器上新建RDB数据库目录:C:\rdb01 2.使用Windows Server Backup还原已备份的邮件数据(mbdb02)库到 C:\rdb01 目录下 3.创建RDB数 ...

  4. FTP远程命令集

    使用ftp命令进行远程文件传输 ftp命令是标准的文件传输协议的用户接口.ftp是在TCP/IP网络上的计算机之间传输文件的简单有效的方法.它允许用户传输ASCII文件和二进制文件. 在ftp会话过程 ...

  5. Delphi Data Type to C# Data Type

    Delphi DataType C# datatype ansistring string boolean bool byte byte char char comp double currency ...

  6. 开源图形库 c语言-图形图像库 集合[转]

    开源图形库 c语言-图形图像库 集合[转] Google三维API O3D O3D 是一个开源的 Web API 用来在浏览器上创建界面丰富的交互式的 3D 应用程序.这是一种基于网页的可控3D标准. ...

  7. AR增强现实 Augmented Reality

    增强现实(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上对应图像的技术,这样的技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这样的技术最早于19 ...

  8. iOS 开发——实用技术Swift篇&Swift 懒加载(lazy)

    Swift 懒加载(lazy) 在程序设计中,我们经常会使用 * 懒加载 * ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都 ...

  9. 深入了解android平台的jni---本地多线程调用java代码

    一.jni调用java对象     JNI提供的功能之一是在本地代码中使用Java对象.包括:创建一个java类对象和通过函数传递一个java对象.创建一个java类对象,首先需要得到得到使用Find ...

  10. OpenRisc-67-OR的汇编

    引言 之前我们写过OR的裸机程序,写过基于OR的linux设备驱动程序,也反汇编过OR的机器码. 本小节,我们将通过一个简单的实验,对OR的汇编(指令集)做一个简单的梳理和測试. 1,基本思想 要想了 ...