Jos*_*ser 14 datepicker reactjs material-ui
我想在DatePickerfrom @mui/lab(5.0.0-alpha.55) 中添加一个“清除”按钮。
我正在尝试什么:
date字段,作为valueprop 传递给DatePickerdate为null我观察到的行为:
date有效,则按预期工作,并且输入被清除date无效,则error清除,但无效日期仍保留在输入中。我尝试过的显示上述行为的基本版本可以在此处看到。
如果您输入了部分日期,然后单击clear,您可以观察到输入的内容没有被清除。
我宁愿避免涉及更改 的解决方案key,因为这会带来其他问题,例如不尊重将 更改为 的外部源date,null以及label在清除输入时需要额外的技巧来尊重转换。
Tho*_*amé 18
对于@mui/x-date-pickersv5 你可以这样做:
<DatePicker
componentsProps={{
actionBar: {
actions: ['clear'],
},
}}
onAccept={(newDate) => {
console.log(newDate);
}}
/>
Run Code Online (Sandbox Code Playgroud)
看看是否newDate是null。
重要更新:
@mui/x-date-pickersv6 请参阅其他评论clear将使用户停留在移动设备上。考虑['clear', 'accept']针对移动设备和['clear']桌面设备,或更简单地,通过使用属性closeOnSelect={true|false}在两个平台上强制合并行为。小智 8
作为Thomas 答案的扩展,如果您使用的是 MUI 5,则可以传递clear给:slotProps
<MobileDatePicker
...
slotProps={{
actionBar: {
actions: ['clear']
}
}}
...
/>
Run Code Online (Sandbox Code Playgroud)
参考:
我的理论是,在内部,仅当输入值与最后一个有效值DatePicker不同时才更新输入值。以下是该错误的发生方式:
DatePicker当有有效值(如初始值)时,您清除Date,状态首先成功重置(value=null, inputValue='')value=Invalid Date, inputValue='invalid Text')value无效,因此不会计数,并且会DatePicker引用最后一个有效值,即null,然后确定当前值不会更改并跳过分派新输入值 ( value=null, inputValue='invalid Text')。我将其归类为 MUI 中的错误,如果您希望修复它,可以在 github 上创建问题。同时,您可以使用以下命令应用此补丁来修复该错误patch-package:
patch-package:npm i patch-packagepostinstall脚本在package.json"scripts": {
"postinstall": "patch-package"
}
Run Code Online (Sandbox Code Playgroud)
node_modules\@mui\lab\internal\pickers\hooks\useMaskedInput.js并根据此提交更改它。npx patch-package @mui/lab以创建每次再次运行后都会应用的补丁npm i @mui/lab。@mui/x-date-pickers软件包版本v6.16.0现在内置了此功能:
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
<DatePicker
slotProps={{ field: { clearable: true } }}
/>
Run Code Online (Sandbox Code Playgroud)
来源: https: //github.com/mui/mui-x/releases/tag/v6.16.0
| 归档时间: |
|
| 查看次数: |
34555 次 |
| 最近记录: |