我想从@mui/lab
(www.example.com)为DatePicker
添加一个“清除”按钮5.0.0-alpha.55。
我正在尝试:
- 将
date
字段存储在state中,作为value
属性传递给DatePicker
- 当需要“清除”值和输入时,将
date
更改为null
我观察到的行为:
- 如果
date
有效,它将按预期工作,并清除输入 - 如果
date
无效,则清除error
,但无效日期仍保留在输入中。
我所尝试的显示上述行为的基本版本可以看到here。
如果您输入部分日期,然后单击clear
,您可以观察到输入没有被清除。
我宁愿避免涉及更改key
的解决方案,因为这会带来其他问题,例如不考虑将date
更改为null
的外部源,以及在清除输入时需要额外的hack来考虑label
转换。
4条答案
按热度按时间ffscu2ro1#
我的理论是,在内部,
DatePicker
只在输入值与上一个 valid 值不同时才更新输入值。下面是错误发生的原因:Date
)时,清除DatePicker
,状态首先成功复位(value=null
、inputValue=''
)value=Invalid Date
,inputValue='invalid Text'
)value
无效,所以它不计数,并且DatePicker
引用最后一个有效值,即null
,然后确定当前值不改变并且跳过分派新输入值(value=null
,inputValue='invalid Text'
)。我认为这是一个来自MUI的bug,如果你想修复这个bug,你可以在github上创建一个issue。同时,你可以通过使用
patch-package
来修复这个bug:patch-package
:npm i patch-package
package.json
中添加postinstall
脚本node_modules\@mui\lab\internal\pickers\hooks\useMaskedInput.js
处的错误文件,并根据this提交对其进行更改。npx patch-package @mui/lab
以创建每次再次运行npm i @mui/lab
后将应用的修补程序。z9zf31ra2#
这个自定义组件怎么样?
我也给予你一个github基本项目在react。
https://github.com/HastaCs/MUI_DatePicker_ClearButton
fiei3ece3#
MUI DatePicker有一个clearable属性。当设置为true时,它会显示一个清除按钮。您可以使用clearText属性更改清除按钮的文本。但是,我要指出的是,它不会触发onChange事件,也没有onClear事件(在写这篇文章的时候)。所以当我使用它的时候,不可能那样改变状态。但是onAccept事件被激发了,并且如果您传递value参数,它将为null。
在此查看所有API设置。https://mui.com/api/date-picker/
3pvhb19x4#
这是我做了什么,使清除功能的工作。我最近发现了这个解决方案,所以我可能会改变这在未来...但现在它的罚款。