|
1 |
| -# react-native-dynamic-picker # |
2 |
| -============================ |
| 1 | +### react-native-dynamic-picker |
| 2 | +------------ |
| 3 | +**I am so sorry.Now only the Chinese document. |
| 4 | +The English document will be updated in the near future. |
| 5 | +Please stay tuned.** |
| 6 | +# Introduction |
| 7 | +基于 **react-native** 原生组件 **Picker** 。支持多级联动,如** “省-市-区” **三级联动。 |
| 8 | +包内置有 **DateTimePicker**,该组件是 **react-native-dynamic-picker ** 的一个扩展,可用于选择 “年-月-日-时-分-秒”。 |
| 9 | + |
| 10 | +注:在该文档下面的内容中,除非特别注明,否则 **Picker** 都指代 **react-native-dynamic-picker ** |
| 11 | + |
| 12 | +IOS效果图(IOS Demo Screenshot): [点击查看(click)](https://raw.githubusercontent.com/xiaocaibird/react-native-dynamic-picker/master/readme/img/ios.png "点击查看(click)") |
| 13 | +Android效果图(Android Demo Screenshot): [点击查看(click)](https://raw.githubusercontent.com/xiaocaibird/react-native-dynamic-picker/master/readme/img/android1.jpeg "点击查看(click)") [点击查看(click)](https://raw.githubusercontent.com/xiaocaibird/react-native-dynamic-picker/master/readme/img/android2.jpeg "点击查看(click)") |
| 14 | + |
| 15 | +# Install |
| 16 | + |
| 17 | +#### lastest version: 1.0.1 |
| 18 | + |
| 19 | +```shell |
| 20 | +npm install --save react-native-dynamic-picker |
| 21 | +``` |
| 22 | + |
| 23 | +# Example |
| 24 | + |
| 25 | + |
| 26 | +```javascript |
| 27 | +import * as React from 'react'; |
| 28 | +import { StyleSheet } from 'react-native'; |
| 29 | +import { Picker, DateTimePicker } from 'react-native-dynamic-picker'; |
| 30 | + |
| 31 | +export default class Example extends React.Component { |
| 32 | + render() { |
| 33 | + return ( |
| 34 | + <View style={styles.container}> |
| 35 | + <Picker data={this.props.list} title='选择' branchTitles={['选项']} /> |
| 36 | + <Picker isDynamic={true} data={this.props.areaList} title='选择地区' branchTitles={['省', '市', '区']} /> |
| 37 | + <DateTimePicker title='选择日期' type={DateTimePicker.type.date} /> |
| 38 | + </View > |
| 39 | + ) |
| 40 | + } |
| 41 | +} |
| 42 | + |
| 43 | +const styles = StyleSheet.create({ |
| 44 | + container: { |
| 45 | + flex: 1, |
| 46 | + flexDirection: 'column' |
| 47 | + } |
| 48 | + }) |
| 49 | +``` |
| 50 | +#### data说明: |
| 51 | + |
| 52 | +------------ |
| 53 | + |
| 54 | + |
| 55 | +###### 当 isDynamic 为true时 |
| 56 | + |
| 57 | + |
| 58 | + data 为一个 "item List"(即[item,item,item...]) ,该 List 是 Picker 第一列要显示的数据, |
| 59 | + |
| 60 | + item的数据结构如下: |
| 61 | + { |
| 62 | + value: string, //值 |
| 63 | + lable: string, //显示的文本 |
| 64 | + children: item[] //子节点 |
| 65 | + mustGetNewChildrenEveryTime: boolean //当设置getChildrenFuns(参阅参数说明表)时,是否要每次都更新子节点,默认值false(注:没有 "动态数据绑定" 的开发需求的朋友,可以不用理会该值) |
| 66 | + } |
| 67 | + 样例数据:[ |
| 68 | + { |
| 69 | + value:'100', |
| 70 | + lable:'山东省', |
| 71 | + children:[ |
| 72 | + { |
| 73 | + value:'110', |
| 74 | + lable:'济宁市', |
| 75 | + children:[ |
| 76 | + { |
| 77 | + value:'111', |
| 78 | + lable:'市中区', |
| 79 | + children:undefined |
| 80 | + }, |
| 81 | + { |
| 82 | + value:'112', |
| 83 | + lable:'任城区', |
| 84 | + children:undefined |
| 85 | + } |
| 86 | + ] |
| 87 | + }, |
| 88 | + { |
| 89 | + value:'120', |
| 90 | + lable:'德州市', |
| 91 | + children:... |
| 92 | + } |
| 93 | + ] |
| 94 | + }, |
| 95 | + { |
| 96 | + value: '200', |
| 97 | + lable: '山西省', |
| 98 | + children: [ |
| 99 | + ... |
| 100 | + ] |
| 101 | + }, |
| 102 | + ... |
| 103 | + ] |
| 104 | + |
| 105 | + |
| 106 | +------------ |
| 107 | + |
| 108 | + |
| 109 | +###### 当 isDynamic 为false时 |
| 110 | + |
| 111 | + |
| 112 | + data 为一个二维数组 [[item,item...],[item,item...],[item,item...],...],其中每一个[item,item,...] 生成一列数据。 |
| 113 | + |
| 114 | + item数据结构如下: |
| 115 | + { |
| 116 | + value: string, //值 |
| 117 | + lable: string, //显示的文本 |
| 118 | + } |
| 119 | + |
| 120 | + 样例数据: |
| 121 | + [ |
| 122 | + [ |
| 123 | + { |
| 124 | + value:'00', |
| 125 | + lable:'00时' |
| 126 | + }, |
| 127 | + { |
| 128 | + value:'01', |
| 129 | + lable:'01时' |
| 130 | + }, |
| 131 | + { |
| 132 | + value:'02', |
| 133 | + lable:'02时' |
| 134 | + }, |
| 135 | + ... |
| 136 | + ], |
| 137 | + [ |
| 138 | + { |
| 139 | + value:'00', |
| 140 | + lable:'00分' |
| 141 | + }, |
| 142 | + { |
| 143 | + value:'01', |
| 144 | + lable:'01分' |
| 145 | + }, |
| 146 | + { |
| 147 | + value:'02', |
| 148 | + lable:'02分' |
| 149 | + }, |
| 150 | + ... |
| 151 | + ] |
| 152 | + ] |
| 153 | + |
| 154 | + |
| 155 | +#### DateTimePicker 使用说明 |
| 156 | + |
| 157 | + DateTimePicker 是基于 Picker 扩展并封装好的一个 datetime picker。支持 '年-月-日-时-分-秒' 全部或部分选择。具体效果可自己切换不同的 type 来体验。 |
| 158 | + |
| 159 | + type的值为 DateTimePicker.type 中的一个,取值如下 |
| 160 | + { |
| 161 | + datetime, |
| 162 | + date, |
| 163 | + year_month, |
| 164 | + month_day_time, |
| 165 | + month_day, |
| 166 | + day_time, |
| 167 | + time |
| 168 | + } |
| 169 | + |
| 170 | + |
| 171 | + |
| 172 | +# Picker Parameters |
| 173 | +#### 注: 只有data是必需参数,其它参数都有预设值。但请注意 isDynamic 和 data 的关系 |
| 174 | + |
| 175 | +| 参数名 | 作用 | 说明 | |
| 176 | +| :------------: | :------------: | :------------: | |
| 177 | +| isDynamic | 是否联动(boolean) | 当 isDynamic 为true时为联动。默认为false。建议在使用时总是指定isDynamic | |
| 178 | +| data | 绑定的数据([item,item,...] 或[[item,item...],[item,item...],...] ) | 根据 isDynamic 的值不同,data要求的格式也不一样。详情请参阅 **Example** | |
| 179 | +| title | Picker的标题(string) | | |
| 180 | +| titleStyle | title的样式(TextStyle) | | |
| 181 | +| branchTitles | 每一列的小标题(string List) | 如[省、市、区] | |
| 182 | +| branchTitleStyle | 每一列的小标题的样式(TextStyle List 或 TextStyle) | 传入List可控制每一个列标题的样式,或传入一个 TextStyle 控制所有列标题的样式 | |
| 183 | +|branchPickersStyles | 控制每一个 react-native 原生Picker的样式(ViewStyle List 或 ViewStyle) | 传入List可控制每一个react-native 原生Picker,传入一个可统一控制。对于react-native 原生Picker的样式控制请参阅 react-native 的文档 | |
| 184 | +|branchPickersItemStyles(only IOS) | 控制每一个 react-native 原生Picker.Item的样式(TextStyle List 或 TextStyle) | 仅适用IOS | |
| 185 | +| topInfoStyle | Picker顶部提示信息的样式(TextStyle) | | |
| 186 | +| topInfoCreateFun | Picker顶部提示信息的生成函数(function) | 每次选项变化时调用该函数,根据当前选择的值生成对应的信息。该函数可获取到一个参数 **selectItems**,是当前所有被选中的项,该函数最后必需返回一个string。生成的值如:***当前日期为2011年1月1日 周五*** 。 | |
| 187 | +| buttonStyle | 底部button样式(TextStyle) | | |
| 188 | +| okButtonText | 确认按钮的文本(string)| 默认为'确定' | |
| 189 | +|cancelButtonText|取消按钮的文本(string)| 默认为'取消' | |
| 190 | +|okCallBack|点击确认按钮后的回调函数(function)| 传递两个参数selectValues和selectItems,分别为当前选中的所有值和当前选中的所有选项| |
| 191 | +|cancelCallBack|点击取消按钮后的回调函数(function)|传递两个参数selectValues和selectItems,分别为当前选中的所有值和当前选中的所有选项| |
| 192 | +|colunmMax|每一行有多少列(number)| 默认值为3。当传入的data使生成的Picker的列数大于colunmMax时,Picker会自动换行。如当传入的data会生成'年-月-日-时-分' 五列数据时,如果colunmMax为3,则 '年-月-日' 会单独显示一行,而 '时-分' 会排列到一下行 | |
| 193 | +| defaultSelectValues| 初始化时默认选中的值(string List)|| |
| 194 | +|defaultValueButtonShow| 是否显示 '默认值' 按钮(boolean) | 点击该按钮可让Picker切换到一个默认值,如果指定了getDefaultSelectValuesFun则调用getDefaultSelectValuesFun,否则切换到 defaultSelectValues 匹配的值 | |
| 195 | +|defaultValueButtonText| '默认值' 按钮的文本(string) || |
| 196 | +|getDefaultSelectValuesFun| 当点击'默认值' 按钮时的回调函数(function) | 该函数必需返回一个SelectValues List, 以使 Picker 选择到对应的默认值 | |
| 197 | +|pressMaskLayerToHide| 点击半透背景时是否关闭Picker(boolean) | 默认值为false | |
| 198 | +|getChildrenFuns| 动态获取children的函数List(function List) | 这是一个函数列表,即[fun,fun,fun...],其中每一个fun对应Picker的一列。 isDynamic 为true时, 如果设置了getChildrenFuns ,当切换到一个没有 children 的 item时 , Picker会根据该item所在的列,自动调用对应的 getChildrenFun 来获取 children。每一个 getChildrenFun 会得到两个参数,selectItems(当前被选中的所有项),index(当前选中项所在的列)。getChildrenFun 必需返回一个 item List 。*注:当设置了 getChildrenFuns 并且某个item设置了 mustGetNewChildrenEveryTime 为true,那么每一次选中该item时,item总是会调用对应的 getChildrenFun 动态获取children,如果 mustGetNewChildrenEveryTime 没有设置或为false,则只有当 children 为undefined或null 时才会调用getChildrenFun* | |
| 199 | + |
| 200 | + |
| 201 | +# DateTimePicker Parameters |
| 202 | + |
| 203 | +#### 所有 **Picker** 的 Parameters 在 **DateTimePicker** 中也是有效的,但如果没有特殊需求,请使用默认的 **Picker** 参数。 |
| 204 | + |
| 205 | +**注:DateTimePicker 的所有 Parameters 均有预设值。** |
| 206 | + |
| 207 | +| 参数名 | 作用 | 说明 | |
| 208 | +| :------------: | :------------: | :------------: | |
| 209 | +|type|设置类型(DateTimePicker.type) | DateTimePicker.type 的取值有 { datetime, date, year_month, month_day_time, month_day, day_time, time} | |
| 210 | +| minYear | 最小年份(number) || |
| 211 | +| maxYear| 最大年份(number)|| |
| 212 | +|showNowDay|是否显示“今天”按钮(boolean)|| |
| 213 | +|showSecond|是否显示“秒”(boolean)|| |
| 214 | +|unitTexts|单位列表(string List)| 默认值为:['年', '月', '日', '时', '分', '秒'] | |
| 215 | +|showWeek|是否显示“星期X”(boolean)|| |
| 216 | +|weekTextType|“星期X”的显示类型(DateTimePicker.weekTextType)| DateTimePicker.weekTextType 的取值{ en, en_simple, cn_zhou, cn_xingQi } | |
| 217 | + |
| 218 | +# Last |
| 219 | + |
| 220 | +第一次发布开源组件,不足的地方很多,我会加紧完善的。 |
| 221 | +自己做的小东西也不少,也早就想把一些自己觉得还可以的东西分享给大家。但工作一直挺忙,开源组件的质量把控和文档(尤其是英文的文档,想到就头痛)的维护又确实是一件很费神的事,所以就一拖再拖。最近我终于下定决心,不能再自己闭门造车了,要开始为咱们的开源社区添砖加瓦了,所以把这个我之前用typescript写的react-native组件发布出来。我在开发第一个react-native项目时,遇到了“省-市-区”三级联动的问题,在社区里找了一天也没有很合适的组件,于是我决定自己码一个出来。我自己用起来觉得还行,为了发布出来我又做了一些改进。希望大家能希望。 |
| 222 | + |
| 223 | +有问题请给我留言。 |
| 224 | + |
| 225 | +#### 最后的最后:Enjoy It |
0 commit comments