我有一种与MUI建立的形式。并以我的形式使用SELECT元素使用自动完成的MUI组件。对于验证,我选择了基于ZOD的基于模式的验证方法。对于该表格,我正在使用React Hook表单。
在我的架构中,我定义了一个对象,只有一个项目,即集合项目,这是一个带有所有必要验证的字符串。EAFE选择选项是一个对象。 React Hook表单已经处理了Onchange事件。
说话。每当我选择一个新选项时,在React Hook表单DevTool中,集合的值是一个对象。我想实现的是,将所选选项的UUID设置为自动完成的值,并将该UUID的相应标签显示为所选选项的标签。
如果这是不可能的,我想知道是否有一种方法告诉ZOD可以接收一个对象作为值,然后在表单提交中操作已发送的数据。这是工作项目的代码和框链接:
https://codesandbox.io/s/autocomplete-trinaining-lvhkz7任何帮助都会很乐意接受
已经花了数千个小时试图找到如何实现这一目标,但null
P:React Hook形式是文档上右上角的小粉红色框。附加文件 我试图编写一种自定义on Change方法,而不是涉及钩钩形式的一种。
MUI自动完成的值始终是对象。这与其他MUI控件(例如Select)不同,您可以遵循{value,label}模式。在MUI上,关于此主题有一个开放的问题:
Https://github.com/mui/material-ui/issues/23708. ZOD具有.Transform函数,可用于接受对象,然后将它们变成值。这对这种情况可能会有所帮助。此外,您可以仅提取handlesubmit函数中的值。
eg:
autocompleteOption: z
.object({
id: z.number(),
})
.transform((val) => val.id)
文献:
https://zod.dev/?id =transform
如果您使用.transform,请注意输入类型的架构类型在输入中与输出不同。请参阅
https://zod.dev/?id =zodtype-with-zodeffects。默认值还需要遵循输入类型。