【发布时间】:2022-01-06 10:40:16
【问题描述】:
我有一种情况,我需要调用我的数据库来获取一些默认值。但万一数据不存在,我将在我的useForm 中设置一些默认值。基本上,这意味着如果我无法从数据库中获取默认值,useForm 中声明的defaultValues 是一个备用值。
据我了解,根据documentation 与useForm,
当一个组件第一次被渲染时,在用户与之交互之前,输入的默认值被用作初始值。
或者基本上,useForm 是页面加载时首先定义的内容之一。
所以,除非我可以在 useForm 加载之前调用我的数据库,否则我有点卡住了。
我读到每个 Controller 字段都可以有一个名为 defaultValue 的东西,这听起来像是解决方案,但文档提到了一个警告
如果同时设置了 defaultValue 和 defaultValues,将使用 defaultValues 中的值。
我考虑过setValues,但我想使用isDirty 函数,它允许字段验证,用于检查表单是否脏的值基于useForm defaultValues。因此,如果我使用setValues,表单将被声明为脏,这是我不想要的。
TL;DR 这就是我想要的:
这是我的初始值(后备值,结果 A)。
const { formState: { isDirty }, } = useForm(
{defaultValues:{
userID: "",
userName: "",
userClass: "administrator",
}}
);
我想要做的是进行数据库调用并替换数据,这样如果调用成功,它现在看起来像这样(结果 B)(如果失败,它将保持为结果 A)。
const { formState: { isDirty }, } = useForm(
{defaultValues:{
userID: "1",
userName: "user",
userClass: "administrator",
}}
);
请注意,DB 调用将仅替换 userID 和 userName 的默认值,userClass 的默认值将保持不变。
所以,流程是这样的:
案例1:渲染表单->结果A->数据库调用->成功->结果B
案例 2:渲染表单 -> 结果 A -> 数据库调用 -> 失败/无数据 -> 结果 A
因此,除非我根据具体情况实际键入与任一结果的默认值不同的输入,否则情况 1 和情况 2 在我检查时都应返回 isDirty==false。
【问题讨论】:
标签: reactjs react-hooks react-hook-form