1.0.6 • Published 7 years ago

react-native-dynamic-picker v1.0.6

Weekly downloads
16
License
MIT
Repository
github
Last release
7 years ago

react-native-dynamic-picker

npmjs.com 里的文档(README.md)可能不是最新的。 请到 github 查阅

click to view English Document


Introduction

基于 react-native 原生组件 Picker 。支持多级联动,如 “省-市-区” 三级联动。 包内置有 DateTimePicker,该组件是 react-native-dynamic-picker 的一个扩展,可用于选择 “年-月-日-时-分-秒”。

注:在该文档下面的内容中,除非特别注明,否则 Picker 都指代 react-native-dynamic-picker

IOS效果图(IOS Demo Screenshot): 点击查看(click)

Android效果图(Android Demo Screenshot): 点击查看(click) 点击查看(click)

Install

lastest version: 1.0.6

npm install --save react-native-dynamic-picker

Example

import * as React from 'react';
import { StyleSheet, View } from 'react-native';
import { Picker, DateTimePicker } from 'react-native-dynamic-picker';

export default class Example extends React.Component {
	componentDidMount(){
		this.refs['Picker'].showPicker(true);
		this.refs['DynamicPicker'].showPicker(true);
		this.refs['DateTimePicker'].showPicker(true);		
	}
    render() {
        return (
            <View style={styles.container}>
                <Picker ref='Picker' data={this.props.list} title='选择' branchTitles={['选项']} />
                <Picker ref='DynamicPicker' isDynamic={true}  data={this.props.areaList} title='选择地区' branchTitles={['省', '市', '区']} />
                <DateTimePicker ref='DateTimePicker' title='选择日期' type={DateTimePicker.type.date} />
            </View >
        )
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        flexDirection: 'column'
    }
	})

Show And Hide

		this.refs['Picker'].showPicker(true);//Show
		this.refs['Picker'].showPicker(false);//Hide

data说明:


当 isDynamic 为true时
data 为一个 "item List"(即[item,item,item...]) ,该 List  是 Picker 第一列要显示的数据,
		
item的数据结构如下:
        {
            value: string, //值
            lable: string,  //显示的文本
            children: item[]  //子节点
            mustGetNewChildrenEveryTime: boolean  //当设置getChildrenFuns(参阅参数说明表)时,是否要每次都更新子节点,默认值false(注:没有 "动态数据绑定" 的开发需求的朋友,可以不用理会该值)
        }
样例数据:[
	{
		value:'100',
		lable:'山东省',
		children:[
					{
						value:'110',
						lable:'济宁市',
						children:[
									{
										value:'111',
										lable:'市中区',
										children:undefined 
									},
									{
										value:'112',
										lable:'任城区',
										children:undefined 
									}
								]
					},
					{
						value:'120',
						lable:'德州市',
						children:...
					}
				]
	},
	{
		value: '200',
		lable: '山西省',
		children: [
      		...
    		]
  	},
		...
	]

当 isDynamic 为false时
data 为一个二维数组 [[item,item...],[item,item...],[item,item...],...],其中每一个[item,item,...] 生成一列数据。

item数据结构如下:
			{
                value: string, //值
                lable: string,  //显示的文本
			}

样例数据:
		[
			[
			     {
				 	value:'00',
					lable:'00时'
				 },
				 {
				 	value:'01',
					lable:'01时'
				 },
				 {
				 	value:'02',
					lable:'02时'
				 },
				 ...
			],
			[
			     {
				 	value:'00',
					lable:'00分'
				 },
				 {
				 	value:'01',
					lable:'01分'
				 },
				 {
				 	value:'02',
					lable:'02分'
				 },
				 ...
			]
		]

DateTimePicker 使用说明

DateTimePicker 是基于 Picker 扩展并封装好的一个 datetime picker。支持 '年-月-日-时-分-秒' 全部或部分选择。具体效果可自己切换不同的  type  来体验。

type的值为  DateTimePicker.type  中的一个,取值如下
 {
    datetime,
    date,
    year_month,
    month_day_time,
    month_day,
    day_time,
    time
}

Picker Parameters

注: 只有data是必需参数,其它参数都有预设值。但请注意 isDynamic 和 data 的关系

参数名作用类型说明
isDynamic是否联动boolean当 isDynamic 为true时为联动。默认为false。建议在使用时总是指定isDynamic
data绑定的数据item,item,... 或 [item,item...,item,item...,...]根据 isDynamic 的值不同,data要求的格式也不一样。详情请参阅 Example
titlePicker的标题string
titleStyletitle的样式TextStyle
branchTitles每一列的小标题string List省、市、区
branchTitleStyle每一列的小标题的样式TextStyle List 或 TextStyle传入List可控制每一个列标题的样式,或传入一个 TextStyle 控制所有列标题的样式
branchPickersStyles控制每一个 react-native 原生Picker的样式ViewStyle List 或 ViewStyle传入List可控制每一个react-native 原生Picker,传入一个可统一控制。对于react-native 原生Picker的样式控制请参阅 react-native 的文档
branchPickersItemStyles(only IOS)控制每一个 react-native 原生Picker.Item的样式TextStyle List 或 TextStyle仅适用IOS
topInfoStylePicker顶部提示信息的样式TextStyle
topInfoCreateFunPicker顶部提示信息的生成函数function每次选项变化时调用该函数,根据当前选择的值生成对应的信息。该函数可获取到一个参数 selectItems,是当前所有被选中的项,该函数最后必需返回一个string。生成的值如:当前日期为2011年1月1日 周五
buttonStyle底部button样式TextStyle
okButtonText确认按钮的文本string默认为'确定'
cancelButtonText取消按钮的文本string默认为'取消'
okCallBack点击确认按钮后的回调函数function传递两个参数selectValues和selectItems,分别为当前选中的所有值和当前选中的所有选项
cancelCallBack点击取消按钮后的回调函数function传递两个参数selectValues和selectItems,分别为当前选中的所有值和当前选中的所有选项
colunmMax每一行有多少列number默认值为3。当传入的data使生成的Picker的列数大于colunmMax时,Picker会自动换行。如当传入的data会生成'年-月-日-时-分' 五列数据时,如果colunmMax为3,则 '年-月-日' 会单独显示一行,而 '时-分' 会排列到一下行
defaultSelectValues初始化时默认选中的值string List
defaultValueButtonShow是否显示 '默认值' 按钮boolean点击该按钮可让Picker切换到一个默认值,如果指定了getDefaultSelectValuesFun则调用getDefaultSelectValuesFun,否则切换到 defaultSelectValues 匹配的值
defaultValueButtonText'默认值' 按钮的文本string
getDefaultSelectValuesFun当点击'默认值' 按钮时的回调函数function该函数必需返回一个SelectValues List, 以使 Picker 选择到对应的默认值
pressMaskLayerToHide点击半透背景时是否关闭Pickerboolean默认值为false
getChildrenFuns动态获取children的函数Listfunction 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

DateTimePicker Parameters

所有 Picker 的 Parameters 在 DateTimePicker 中也是有效的,但如果没有特殊需求,请使用默认的 Picker 参数。

注:DateTimePicker 的所有 Parameters 均有预设值。

参数名作用类型说明
type设置类型DateTimePicker.typeDateTimePicker.type 的取值有 { datetime, date, year_month, month_day_time, month_day, day_time, time}
minYear最小年份number
maxYear最大年份number
showNowDay是否显示“今天”按钮boolean
showSecond是否显示“秒”boolean
unitTexts单位列表string List默认值为:'年', '月', '日', '时', '分', '秒'
showWeek是否显示“星期X”boolean
weekTextType“星期X”的显示类型DateTimePicker.weekTextTypeDateTimePicker.weekTextType 的取值{ en, en_simple, cn_zhou, cn_xingQi }

Last

第一次发布开源组件,不足的地方很多,我会加紧完善的。 自己做的小东西也不少,也早就想把一些自己觉得还可以的东西分享给大家。但工作一直挺忙,开源组件的质量把控和文档(尤其是英文的文档,想到就头痛)的维护又确实是一件很费神的事,所以就一拖再拖。最近我终于下定决心,不能再自己闭门造车了,要开始为咱们的开源社区添砖加瓦了,所以把这个我之前用typescript写的react-native组件发布出来。我在开发第一个react-native项目时,遇到了“省-市-区”三级联动的问题,在社区里找了一天也没有很合适的组件,于是我决定自己码一个出来。我自己用起来觉得还行,为了发布出来我又做了一些改进。希望大家能喜欢。

有问题请给我留言。

最后的最后:Enjoy It

1.0.6

7 years ago

1.0.5

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

8 years ago

1.0.1

8 years ago

1.0.0

8 years ago