next icon indicating copy to clipboard operation
next copied to clipboard

[DatePicker]关于Form包含下的DatePicker问题

Open crawler-django opened this issue 4 years ago • 5 comments
trafficstars

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数组了

crawler-django avatar Apr 16 '21 08:04 crawler-django

确认下 DatePicker2 是否有此类问题,类型不能变

bindoon avatar Apr 21 '21 03:04 bindoon

DatePicker2没有问题, 都统一返回Monent.
但是DatePicker没有Form裹起来的话, 不管点没点clear icon. DatePicker都是返回字符串的...

crawler-django avatar Apr 21 '21 06:04 crawler-django

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

YSMJ1994 avatar Mar 13 '24 09:03 YSMJ1994

目前来看 DatePicker 及其子组件对于 inputAsString 处理都有些问题,我们将在近期修复,使其始终保持一致的行为

YSMJ1994 avatar Mar 13 '24 09:03 YSMJ1994

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

eternalsky avatar May 07 '24 08:05 eternalsky