TimePicker 时间选择框

如果项目中使用的是 0.x 版本的基础组件(@icedesign/base, @ali/ice, @alife/next),请在左侧导航顶部切换组件版本。

安装方法

  1. 在命令行中执行以下命令npm install @alifd/next@latest -S

Guide

何时使用

当用户需要输入一个时间,可以点击输入框,在弹出的时间选择面板上操作。时间选择面板仅支持 24 小时制。format 支持的时间格式如下:

格式例子说明
H HH0..23时,24 小时制
m mm0..59
s ss0..59

组件默认使用 moment 实例作为输入输出值,推荐使用结合 moment 的方式使用组件。此外,组件也支持传入时间字符串的方式,例如直接传入 "12:00:00"。用户传入什么类型的 value/defaultValue 值,就会在 onChange 中返回相应的类型。

API

TimePicker

参数说明类型默认值
label按钮的文案ReactNode-
size时间选择框的尺寸可选值:'small', 'medium', 'large'Enum'medium'
state输入框状态可选值:'error', 'success'Enum-
placeholder输入框提示String-
value时间值(moment 对象或时间字符串,受控状态使用)custom-
defaultValue时间初值(moment 对象或时间字符串,非受控状态使用)custom-
hasClear是否允许清空时间Booleantrue
format时间的格式https://momentjs.com/docs/#/parsing/string-format/String'HH:mm:ss'
hourStep小时选项步长Number-
minuteStep分钟选项步长Number-
secondStep秒钟选项步长Number-
disabledHours禁用小时函数签名:Function(index: Number) => Boolean参数:index: {Number} 时 0 - 23返回值:{Boolean} 是否禁用Function-
disabledMinutes禁用分钟函数签名:Function(index: Number) => Boolean参数:index: {Number} 分 0 - 59返回值:{Boolean} 是否禁用Function-
disabledSeconds禁用秒钟函数签名:Function(index: Number) => Boolean参数:index: {Number} 秒 0 - 59返回值:{Boolean} 是否禁用Function-
visible弹层是否显示(受控)Boolean-
defaultVisible弹层默认是否显示(非受控)Boolean-
popupContainer弹层容器签名:Function(target: Object) => ReactNode参数:target: {Object} 目标节点返回值:{ReactNode} 容器节点Function-
popupAlign弹层对齐方式, 详情见Overlay 文档String'tl tl'
popupTriggerType弹层触发方式可选值:'click', 'hover'Enum'click'
onVisibleChange弹层展示状态变化时的回调签名:Function(visible: Boolean, type: String) => void参数:visible: {Boolean} 弹层是否隐藏和显示type: {String} 触发弹层显示和隐藏的来源 fromTrigger 表示由trigger的点击触发; docClick 表示由document的点击触发Functionfunc.noop
popupStyle弹层自定义样式Object-
popupClassName弹层自定义样式类String-
popupProps弹层属性Object-
followTrigger是否跟随滚动Boolean-
disabled是否禁用Booleanfalse
onChange时间值改变时的回调签名:Function(value: Object/String) => void参数:value: {Object/String} 时间对象或时间字符串Functionfunc.noop

ARIA and KeyBoard

按键说明
Enter打开时间选择框
Esc关闭时间选择框
Up输入上一秒的时间 (如果 disabledMinutes={true} 则可能是上一分钟或者上一小时)
Down输入下一秒的时间 (如果 disabledMinutes={true} 则可能是下一分钟或者下一小时)
Page Up输入上一分钟的时间
Page Down输入下一分钟的时间
Alt + Page Up输入上一小时的时间
Alt + Page Down输入下一小时的时间

代码示例

基本

最简单的用法。

TimePicker 时间选择框 - 图1

查看源码在线预览

  1. import { TimePicker } from '@alifd/next';
  2. ReactDOM.render(<TimePicker onChange={(val) => console.log(val)} />, mountNode);

默认值

可以通过 defaultValue 传入默认时间值,并且可以通过选择改变该值。onChange 回调参数的值的类型取决于 defaultValue 的类型。

TimePicker 时间选择框 - 图2

查看源码在线预览

  1. import { TimePicker } from '@alifd/next';
  2. import moment from 'moment';
  3. const defaultVal = moment('12:00:00', 'HH:mm:ss', true);
  4. ReactDOM.render(<div>
  5. <TimePicker defaultValue={defaultVal} onChange={(val) => console.log(val)} /><br /><br />
  6. <TimePicker defaultValue="12:00:00" onChange={(val) => console.log(val)} />
  7. </div>, mountNode);

尺寸

TimePicker 使用和 Input 组件相同的输入框尺寸,可以通过 size 属性进行设置。

TimePicker 时间选择框 - 图3

查看源码在线预览

  1. import { TimePicker } from '@alifd/next';
  2. ReactDOM.render(<div>
  3. <TimePicker size="large" />&nbsp;&nbsp;
  4. <TimePicker />&nbsp;&nbsp;
  5. <TimePicker size="small" />
  6. </div>, mountNode);

受控

通过 valueonChange 实现受控,仅支持通过选择实现受控。

TimePicker 时间选择框 - 图4

查看源码在线预览

  1. import { TimePicker } from '@alifd/next';
  2. import moment from 'moment';
  3. class ControlledTimePicker extends React.Component {
  4. constructor(props, context) {
  5. super(props, context);
  6. this.state = {
  7. value: moment('12:00:00', 'HH:mm:ss', true)
  8. };
  9. }
  10. onSelect = (value) => {
  11. this.setState({ value });
  12. this.props.onChange(value);
  13. }
  14. render() {
  15. return <TimePicker value={this.state.value} onChange={this.onSelect} />;
  16. }
  17. }
  18. ReactDOM.render(<ControlledTimePicker onChange={(val) => console.log(val.format('HH:mm:ss'))} />, mountNode);

禁用时分秒

禁用全部和禁用部分选择项

TimePicker 时间选择框 - 图5

查看源码在线预览

  1. import { TimePicker } from '@alifd/next';
  2. const disabledHours = [1, 2, 3, 4, 5];
  3. const disabledMinutes = [10, 20, 30, 40, 50];
  4. const disabledSeconds = [10, 20, 30, 40, 50];
  5. const disabledItems = (list) => (index) => {
  6. return list.indexOf(index) >= 0;
  7. };
  8. ReactDOM.render(<div>
  9. <p>Disable TimePicker</p>
  10. <TimePicker disabled />
  11. <p>Disable Hours/Minutes/Seconds</p>
  12. <TimePicker disabledHours={disabledItems(disabledHours)} disabledMinutes={disabledItems(disabledMinutes)} disabledSeconds={disabledItems(disabledSeconds)} />
  13. </div>, mountNode);

时间格式

可以通过 format 属性格式化时间值,此外该属性还会影响到时间列的展示。

TimePicker 时间选择框 - 图6

查看源码在线预览

  1. import { TimePicker } from '@alifd/next';
  2. ReactDOM.render(<div>
  3. <p>Hide seconds</p>
  4. <TimePicker format="HH:mm" />
  5. <p>Hide hours</p>
  6. <TimePicker format="mm:ss" />
  7. </div>, mountNode);

步长

可以通过 hourStep, minuteStep, secondStep 分别设置时分秒的选项间隔。

TimePicker 时间选择框 - 图7

查看源码在线预览

  1. import { TimePicker } from '@alifd/next';
  2. ReactDOM.render(<TimePicker onChange={(val) => console.log(val.format('HH:mm:ss'))} hourStep={2} minuteStep={5} secondStep={5} />, mountNode);

结合 Field 使用

配合 Field 使用

TimePicker 时间选择框 - 图8

查看源码在线预览

  1. import { TimePicker, Field, Button } from '@alifd/next';
  2. import moment from 'moment';
  3. class Demo extends React.Component {
  4. field = new Field(this);
  5. onClick = () => {
  6. const value = this.field.getValue('time-picker');
  7. console.log(value.format('HH:mm:ss'));
  8. }
  9. render() {
  10. const { init } = this.field;
  11. const props = init('time-picker', {
  12. rules: [
  13. { required: true, message: 'Time Required' }
  14. ],
  15. initValue: moment('00:00:00', 'HH:mm:ss', true)
  16. });
  17. return (<div>
  18. <TimePicker {...props} /> <br /><br />
  19. <Button onClick={this.onClick}>Print Value in Console</Button>
  20. </div>);
  21. }
  22. }
  23. ReactDOM.render(<Demo />, mountNode);

相关区块

TimePicker 时间选择框 - 图9

暂无相关区块