react-hook-form中ctx.getValues()与onSubmit数据是否存在差异?
getValues() 与 onSubmit 返回值差异说明 二者并非完全等价,实际使用中存在多处明确差异,核心区别如下:
- 字段包含范围不同:
getValues()会直接返回所有已注册字段的瞬时内存值,无论字段是否处于disabled状态、是否符合校验规则,都会原样返回;onSubmit的入参会自动过滤掉处于禁用状态的字段,仅保留校验通过的有效字段。 - 值处理逻辑不同:如果给字段配置了
valueAsNumber/valueAsDate/自定义setValueAs转换规则,或是使用了Zod/Yup等自定义resolver做校验,getValues()返回的是RHF内部存储的原始输入值,不会经过转换、裁剪逻辑;onSubmit触发时会跑完所有值解析、resolver校验流程,返回的是经过规则转换、校验裁剪后的最终结构化值。 - 默认值补全逻辑不同:对于注册后用户从未交互过的字段,部分场景下
getValues()可能返回未初始化的undefined;onSubmit触发时会自动匹配useForm配置的defaultValues,补全未交互字段的默认值。
排查二者返回不一致问题时,可优先核对是否存在禁用字段、是否配置了值转换规则、是否接入了自定义校验解析器这三类高频场景。
内容的提问来源于stack exchange,提问作者Baalamurgan
相关产品推荐
相关产品推荐

