表单重置时swt_culture_type字段值无法重置的问题
问题:表单重置时swt_culture_type字段无法正常重置
执行表单重置操作时,其余字段值均能正常重置,但swt_culture_type字段的值无法重置。即便直接调用setValue设置该字段,它仍始终显示true。
相关代码如下:
const { data: GetCultureTestHeadersDetails } = useQuery({ queryKey: ["headerDataDetailsKey", props?.culture_test_header_id, props?.test_component_id], queryFn: async () => { return await GetCultureTestHeadersDetailsEP(props?.culture_test_header_id, props?.test_component_id, true, 5, 1); }, }); React.useEffect(() => { if (GetCultureTestHeadersDetails?.data?.culture_type) { reset({ txt_code: GetCultureTestHeadersDetails.data.culture_code, atc_test_component: { test_component_id: GetCultureTestHeadersDetails.data.test_component_id, test_component_code: GetCultureTestHeadersDetails.data.test_component_print_name, test_component_print_name: GetCultureTestHeadersDetails.data.test_component_print_name, item_id: 0, }, swt_is_colony_count: GetCultureTestHeadersDetails.data.is_colony_count, txt_colony_count_label: GetCultureTestHeadersDetails.data.colony_count_label, txt_colony_count_default_value: GetCultureTestHeadersDetails.data.colony_count_default_value, swt_is_gram_strain: GetCultureTestHeadersDetails.data.is_gram_strain, txt_gram_strain_label: GetCultureTestHeadersDetails.data.gram_strain_label, ddl_gram_stain_default_value: GetCultureTestHeadersDetails.data.gram_strain_default_value, swt_is_organism: GetCultureTestHeadersDetails.data.is_organism_isolated, txt_organism_isolated_label: GetCultureTestHeadersDetails.data.organism_isolated_label, ddl_organism_default_value: GetCultureTestHeadersDetails.data.organism_isolated_default_value, swt_is_solid_media: GetCultureTestHeadersDetails.data.is_solid_media, ddl_solid_media_default_value: GetCultureTestHeadersDetails.data.solid_media_default_value, txt_solid_media_label: GetCultureTestHeadersDetails.data.solid_media_label, swt_is_liquid_media: GetCultureTestHeadersDetails.data.is_liquid_media, ddl_liquid_media_default_value: GetCultureTestHeadersDetails.data.liquid_media_default_value, txt_liquid_media_label: GetCultureTestHeadersDetails.data.liquid_media_label, swt_is_report_type: GetCultureTestHeadersDetails.data.is_report_type, report_type_default_value: GetCultureTestHeadersDetails.data.report_type_default_value, txt_report_type_label: GetCultureTestHeadersDetails.data.report_type_label, txt_special_instructions: GetCultureTestHeadersDetails.data.special_instruction, txt_description: GetCultureTestHeadersDetails.data.description, ddl_max_count: Number(GetCultureTestHeadersDetails.data.max_result_count), swt_culture_type: GetCultureTestHeadersDetails?.data?.culture_type, swt_status: GetCultureTestHeadersDetails.data.status, }); setValue("swt_culture_type", GetCultureTestHeadersDetails.data.culture_type); console.log("swt_culture_type:", GetCultureTestHeadersDetails.data.culture_type); } }, [GetCultureTestHeadersDetails, GetCultureTestHeadersDetails?.data]);
排查方向及解决建议
- 检查数据类型一致性:确认后端返回的
culture_type类型是否和表单组件期望的一致。比如如果后端返回的是字符串"true"/"false",而开关组件需要布尔值,就会导致显示异常。可以强制转换类型:swt_culture_type: Boolean(GetCultureTestHeadersDetails.data.culture_type), - 验证字段注册正确性:检查
swt_culture_type字段是否在react-hook-form中正确注册,比如register("swt_culture_type")是否绑定到对应的UI组件上,有没有字段名拼写错误或者重复注册的情况。 - 调整reset与setValue的执行逻辑:react-hook-form的
reset是异步操作,后续单独调用的setValue可能被reset的异步逻辑覆盖。建议去掉单独的setValue调用,只通过reset设置字段值;如果需要后续操作,可使用reset的回调参数:reset( { // 其他字段保持不变 swt_culture_type: Boolean(GetCultureTestHeadersDetails.data.culture_type), }, { callback: () => { // 重置完成后的逻辑 } } ); - 检查组件默认值:查看
swt_culture_type对应的UI组件(比如开关组件)是否硬编码了defaultValue={true},导致重置后被默认值覆盖。
内容的提问来源于stack exchange,提问作者Satendra
相关产品推荐
相关产品推荐

