index.jsx 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import React, { useState, useMemo, useCallback, useEffect } from 'react';
  2. import DatePicker from '../../index';
  3. import { Button, Form, withField } from '../../../index';
  4. const FormDatePicker = withField(props => {
  5. const { value, onChange, ...rest } = props;
  6. const mValue = !value ? null : +value; // number => Date 传入组件
  7. const mOnChange = (newValue, newDate) => {
  8. // 直接用第2个参数更方便
  9. // 当删除日期时,newDate为undefined
  10. if (!newDate) {
  11. props.onChange(undefined);
  12. return;
  13. }
  14. // Date => number 反映给上层
  15. props.onChange(+newDate);
  16. };
  17. return <DatePicker {...rest} value={mValue} onChange={mOnChange} />;
  18. });
  19. const Container = ({ children }) => {
  20. return <div style={{ display: 'flex', flexDirection: 'column' }}>{children}</div>;
  21. };
  22. const Item = ({ children }) => (
  23. <div style={{ display: 'flex', alignItems: 'center', flexDirection: 'row', marginBottom: 20 }}>{children}</div>
  24. );
  25. function Demo(props = {}) {
  26. const [value, setValue] = useState('2019-10-01');
  27. const onChange = v => {
  28. console.log(v);
  29. setValue(v);
  30. };
  31. const createOnChangeWithLog = setFn => (str, date) => {
  32. console.log(str, date);
  33. if (typeof setFn === 'function') {
  34. setFn(str);
  35. }
  36. };
  37. const printArgs = (...args) => {
  38. console.log('printArgs: ', ...args);
  39. };
  40. const [open, setOpen] = useState(true);
  41. const [value2, setValue2] = useState(new Date('2019-10-02 8:30:02'));
  42. const [value3] = useState(['2019-10-01', '20191002']);
  43. const [value4, setValue4] = useState(['2019-10-01', '2019-10-09']);
  44. const [value5] = useState(['2019-10-01', '20191109']);
  45. const [value6, setValue6] = useState(['2019-10-01', '20191109']);
  46. const [value7, setValue7] = useState(new Date('2019-11-02 11:32:11'));
  47. const [value8, setValue8] = useState('2019-11-02 11:32:11');
  48. return (
  49. <Container>
  50. {/* <span>参数open受控</span>
  51. <DatePicker
  52. type="date"
  53. value={value}
  54. onChange={onChange}
  55. open={open}
  56. // defaultOpen={open}
  57. motion={false}
  58. onOpenChange={status => {
  59. printArgs(status);
  60. // setOpen(status);
  61. }}
  62. />
  63. <br /> */}
  64. <Item>
  65. <span>date: value + onChange</span>
  66. <DatePicker type="date" value={value} onChange={onChange} />
  67. </Item>
  68. <Item>
  69. <span>dateTime: value </span>
  70. <DatePicker type="dateTime" value={value2} onChange={printArgs} />
  71. </Item>
  72. <Item>
  73. <span>dateTime: value + random + onChange </span>
  74. <DatePicker type="dateTime" value={value8} onChange={createOnChangeWithLog(setValue8)} />
  75. <Button onClick={() => setValue8(new Date())}>Random Value</Button>
  76. </Item>
  77. <Item>
  78. <span>dateTime: value + onChange + format </span>
  79. <DatePicker type="dateTime" format={'yyyy年MM月dd日 HH:mm:ss'} value={value7} onChange={setValue7} />
  80. </Item>
  81. <Item>
  82. <span>dateTime: value + onChange</span>
  83. <DatePicker
  84. type="dateTime"
  85. value={value2}
  86. onChange={createOnChangeWithLog(setValue2)}
  87. onBlur={printArgs}
  88. />
  89. </Item>
  90. <Item>
  91. <span>dateTime: value + onConfirm + needConfirm</span>
  92. <DatePicker type="dateTime" value={value2} onConfirm={setValue2} needConfirm />
  93. </Item>
  94. <Item>
  95. <span>date multiple: value</span>
  96. <DatePicker type="date" value={value3} multiple onChange={printArgs} />
  97. </Item>
  98. <Item>
  99. <span>date multiple: value + onChange</span>
  100. <DatePicker type="date" value={value4} onChange={setValue4} multiple />
  101. </Item>
  102. <Item>
  103. <span>dateRange: value</span>
  104. <DatePicker type="dateRange" value={value5} onChange={printArgs} />
  105. </Item>
  106. <Item>
  107. <span>dateRange: value + onChange</span>
  108. <DatePicker type="dateRange" value={value6} onChange={setValue6} />
  109. </Item>
  110. <Item>
  111. <span>Form.DatePicker dateTime initValue + onChange</span>
  112. <Form>
  113. <Form.DatePicker initValue={new Date()} type={'dateTime'} />
  114. </Form>
  115. </Item>
  116. <Item>
  117. <span>withFied DatePicker dateTime initValue + onChange</span>
  118. <Form>
  119. <FormDatePicker
  120. field={'date'}
  121. initValue={new Date()}
  122. type={'dateTime'}
  123. inputReadOnly
  124. noLabel
  125. rules={[{ required: true, message: '值不能为空' }]}
  126. />
  127. </Form>
  128. </Item>
  129. </Container>
  130. );
  131. }
  132. export default Demo;