项目里有几处功能用到了时间控件,想把Android和IOS的控件统一起来,但是从网上找了一遍开源库,界面相对较丑,而且使用起来很不友好,所以,还是坚持react native自带的组件吧
一、IOS DatePickerIOS
这个组件其实中文网给出的已经比较详细了,我就直接上代码,大家自己感受就行
<DatePickerIOS
mode="date"
minimumDate={new Date(0)}
maximumDate={new Date()}
date={new Date(this.state[key] ? this.state[key] : '')}
onDateChange={(data) => {
this.saveChangeItem(data);
}}
style={{ backgroundColor: Colors.C8 }}
/>
其中,
mode代表选择器的模式 enum(‘date’, ‘time’, ‘datetime’)
minimumDate 代表选择器可以选择的的最小时间
maximumDate 代表选择器可以选择的的最大时间
date 代表初始化的选择器时间
onDateChange 是当选择器选中时间时触发的事件,这里一定要改变data的数据源,否则选择器就是一个固定值没有意义
二、Android DatePickerAndroid
这个组件的渲染用到了异步请求
async disPlayDatePickerAndroid(value) {
try {
const { action, year, month, day } = await DatePickerAndroid.open({
date: value ? new Date(value) : new Date(),
minDate: new Date("1900-01-01"),
maxDate: new Date(),
});
if (action !== DatePickerAndroid.dismissedAction) {
// 这里开始可以处理用户选好的年月日三个参数:year, month (0-11), day
this.setState({ donateTime: new Date(year, month, day) });
}
} catch ({ code, message }) {
console.warn('Cannot open date picker', message);
}
}
基本字段的含义和IOS没什么区别,这个组件只有两个回调,dismissedAction(取消操作)、dateSetAction(保存操作)
另外,由于这两个组件调用的都是系统自带的时间选择器,所有在同一个平台的不同版本上就会有所差异,目前已测的结论是:
4.4.2版本没有取消按钮,界面相对较单一
6.0 7.0有取消按钮,功能完善