react-naitve picker组件封装

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

picker-field组件

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

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

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

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

给picker-field组件传值

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值