【问题标题】:How can I clear MUI DatePicker input?如何清除 MUI DatePicker 输入?
【发布时间】:2021-12-30 14:21:04
【问题描述】:

我想从@mui/lab (5.0.0-alpha.55) 向DatePicker 添加一个“清除”按钮。

我正在尝试什么:

  • 在状态中存储一个date 字段,作为value 属性传递给DatePicker
  • 如果需要“清除”值和输入,请将 date 更改为 null

我观察到的行为:

  • 如果date 有效,则按预期工作,并清除输入
  • 如果date 无效,error 将被清除,但无效日期仍保留在输入中。

我尝试的显示上述行为的基本版本可以看到here

如果你输入了部分日期,然后点击clear,你可以观察到输入没有被清除。

我宁愿避免涉及更改key 的解决方案,因为这会带来其他问题,例如不尊重将date 更改为null 的外部源,以及需要额外的黑客来尊重@987654336 @transition 清除输入时。

【问题讨论】:

    标签: reactjs datepicker material-ui


    【解决方案1】:

    我的理论是,在内部,DatePicker 仅在输入值与最后一个 有效 值不同时更新输入值。以下是该错误的发生方式:

    • 你清除DatePicker当有一个有效值时(比如初始的Date),状态一开始重置成功(value=null,inputValue=''
    • 您输入了一些无效的日期。状态现在是 (value=Invalid Date, inputValue='invalid Text')
    • 因为当前的value 无效,所以不计算在内,DatePicker 引用了最后一个有效值,而不是null,然后确定当前值没有改变并跳过调度新的输入值(value=null, inputValue='invalid Text')。

    我将此归类为来自 MUI 的错误,如果您想修复它,可以在 github 上创建一个 issue。同时,您可以通过使用patch-package 应用此patch 来修复该错误:

    • 安装patch-package:npm i patch-package
    • package.json 中添加postinstall 脚本
    "scripts": {
      "postinstall": "patch-package"
    }
    
    • node_modules\@mui\lab\internal\pickers\hooks\useMaskedInput.js 打开错误文件并根据this 提交更改它。
    • 运行npx patch-package @mui/lab 以创建将在您每次再次运行npm i @mui/lab 后应用的补丁。
    • 重新启动您的开发服务器。

    【讨论】:

    • 感谢您的反馈。不幸的是,该解决方案无法正常工作。它会导致后续 onChange 事件出现问题,其中光标在输入第一个字符后停留在输入的开头。我将提交一个 github 问题,因为这似乎需要在内部进行修复才能完全正常运行。编辑:我在这里发现了一个描述问题的现有 github 问题:github.com/mui-org/material-ui/issues/29001
    • @JoshFraser 看到我更新的答案。您上面链接的问题中的代码应该可以解决问题。
    • 感谢@NearHuscarl。您更新的答案效果很好,但除了您提供的位置之外,我还必须更改node_modules\@mui\lab\node\internal\pickers\hooks\useMaskedInput.js 的文件,以便我的jest 测试也能获得更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2023-01-17
    • 2020-06-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多