next
next copied to clipboard
[DatePicker]关于Form包含下的DatePicker问题
Component
Form
Reproduction link
https://codepen.io/crawler-django/pen/bGgKQBx?editors=0010
Steps to reproduce
一开始console.log打印的都是字符串数组的格式. 使用DatePicker的clear icon清空后, 打印的就都是Moment对象数组的格式. 这造成了我的疑惑, 返回的完全不一样. 虽然RangePicker文档写的要求value, defaultValue都是Moment[], 但是代码上的类型又是any.... 然后字符串数组[2021-01-01, 2021-01-01]传进去也可以正常工作.... 在没点clear icon的时候, 返回值也是字符串数组.... 看似都可以正常工作, 但是点了clear icon后, 返回的就是Moment数组了
确认下 DatePicker2 是否有此类问题,类型不能变
DatePicker2没有问题, 都统一返回Monent.
但是DatePicker没有Form裹起来的话, 不管点没点clear icon. DatePicker都是返回字符串的...
DatePicker 组件会根据 defaultValue 类型来决定返回的 value 类型的,问题出在 contructor 阶段会根据 defaultValue 来决定 value 类型,但在 getDerivedStateFromProps 阶段就只根据 value 来判断了,clear 之后onChange 了一个空值,于是就触发了这个问题。
参考 https://github.com/alibaba-fusion/next/blob/master/components/date-picker/date-picker.jsx#L264
目前来看 DatePicker 及其子组件对于 inputAsString 处理都有些问题,我们将在近期修复,使其始终保持一致的行为
DatePicker 组件会根据 defaultValue 类型来决定返回的 value 类型的,问题出在 contructor 阶段会根据 defaultValue 来决定 value 类型,但在 getDerivedStateFromProps 阶段就只根据 value 来判断了,clear 之后onChange 了一个空值,于是就触发了这个问题。
参考 https://github.com/alibaba-fusion/next/blob/master/components/date-picker/date-picker.jsx#L264
感觉 defaultValue 只在 constructor 影响 inputAsString 逻辑上好像也没有问题,defaultValue 对组件一个生命周期内,只会影响一次,如果后续 defaultValue 变了也是不会影响组件值的,那么理论上也不应该影响 inputAsString