我尝试使用 react-hook-form 来验证输入。但是我发现如果输入放在 Material UI 的对话框组件中,react-hook-form 的 setValue
没有按预期工作,但是当我删除 Dialog 组件时它可以工作。我猜原因是在组件挂载之前设置了值,但仍然找不到解决方案。
该值将从服务器检索,所以我不能使用 react-hook-form 的 defaultValues
。
https://codesandbox.io/s/react-hook-form-material-ui-twbbw
我试过用 useState
来控制输入值,但是还有一个问题。清除输入后,点击提交按钮,出现错误信息,输入的第一个字母I不会显示。
https://codesandbox.io/s/react-hook-form-material-ui-ve2en
原文由 Sam 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题在于注册功能。在调用 Textfield 的 ref 后,您正在使用 register 注册 Textfield。
调用 useEffect 以在初始渲染后使用
setValue
将名称设置为 123。如果open
为真,则在 useEffect 之后呈现对话框内容。内容渲染完成后,调用带有寄存器的 ref 并将 Textfield 的默认值(此处为undefined
)设置为 name 的值。这就是为什么 Textfield 的值显示为 “” 的原因。您需要在调用 render 和 ref 回调后调用 setValue,以便该值保持不变。
您有两种选择:
open
更改后,使用异步延迟(setTimeout
或 promise)在 useEffect 中设置值 async。因此,如果您将open
添加到 useEffect 依赖数组并将值设置为 async,它就可以工作。这是一个 沙盒。useForm({defaultValues: {name: '123}})
将默认值添加到挂钩。