使用 MUI DatePickers 使用 react-hook-form 动态字段解析日期值

如何解决使用 MUI DatePickers 使用 react-hook-form 动态字段解析日期值

我无法将解析的日期传递给 react-hook-form 的提交对象。我需要在字段级别处理解析,因为这是一个动态表单,因此我无法控制用户将使用哪些字段。

我正在使用“setValue()”,我可以看到使用“watch()”时定义的值,但在提交时它未定义。找不到我做错了什么。

这是一个可重现的例子:

Edit lively-sun-cbnem

谢谢!

解决方法

未在 onSubmit 函数中获取日期值的原因是您没有为 defaultValue 字段设置 Controller。您需要在字段级别设置 defaultValue 或使用 useForm 调用 defaultValues。此外,您必须删除 valueKeyboardDatePicker 道具,因为 Controller 已经通过传播字段道具来处理此问题。

有关 Controller 的详细信息,请参阅文档中的此 section

您也不应该将 refController 属性函数中提供的 render 分配给 KeyboardDatePicker,而是将其分配给 ref输入字段的道具(这就是您在 CodeSandbox 演示中收到控制台错误的原因)。这样做可以让 RHF 关注错误输入。您也可以在文档的 Controller 部分找到相关信息。

这里也不需要 setValue,您可以直接将格式化的 Date 返回到 Controller.onChange 方法。 Controller.onChange 方法的返回值会自动使用新值设置 Controller 字段。

真正的问题是:KeyboardDatePicker.onChange 仅在值更改时调用。 IE。如果您最初在没有用户交互的情况下设置日期,则不会触发 KeyboardDatePicker.onChange,因此您的字段具有您最初设置的日期对象的值(只需在更新的 CodeSandbox 中点击“提交”即可进行检查)。只有当您更改日期时,才会调用 KeyboardDatePicker.onChange 并且您会在提交对象中以字符串形式接收格式化的日期。

我不知道一个干净的解决方案如何手动触发 onChangeKeyboardDatePicker,可能您必须最初将格式化的日期字符串设置为 defaultValue {1}} 字段而不是 Controller

Edit kind-banzai-zw705

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?