You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React-Hook-Forms配置MUI Autocomplete预设值时数据被清空,求助解决方案

解决MUI Autocomplete结合React Hook Form Controller时预设值被清空的问题

问题核心原因

出现该问题主要有两个关键因素:

  • MUI Autocomplete默认通过对象引用判断选项匹配性,若预设的salesPerson对象与options数组中的对象不是同一引用,组件会判定无匹配选项,进而清空对应表单值。
  • 表单initialValues未正确配置,导致Controller无法读取到预设的初始值。

具体解决方案

1. 确保表单初始值配置正确

初始化React Hook Form时,必须在initialValues中明确设置agreementHeaderData.salesPerson的初始值:

const { control, handleSubmit } = useForm({
  initialValues: {
    agreementHeaderData: {
      salesPerson: {
        id: "2",
        name: "Jhon,Snow",
        label: "Jhon,Snow",
        value: "Jhon.Snow@reliance.com",
        filter_field: null,
      }
    }
  }
});

2. 给Autocomplete添加自定义匹配规则

添加isOptionEqualToValue属性,通过唯一标识(比如id)定义选项与值的匹配逻辑,替代默认的引用匹配:

<Controller
  name="agreementHeaderData.salesPerson"
  control={props.formControl}
  render={({ field }) => (
    <Autocomplete
      className="salesPerson"
      {...field}
      fullWidth
      disablePortal
      id="salesPerson"
      // 关键:通过id判断选项与值是否匹配
      isOptionEqualToValue={(option, value) => option.id === value.id}
      onChange={(event, item) => {
        field.onChange(item);
      }}
      options={salesPerson}
      renderInput={(params) => <TextField {...params} required label="Sales Person" variant="filled" size="small" />}
    />
  )}
/>

3. 验证options数组包含匹配选项

确保salesPerson数组中存在与初始值id为"2"的对象,示例如下:

const salesPerson = [
  { id: "1", name: "Arya Stark", label: "Arya Stark", value: "arya@reliance.com" },
  { id: "2", name: "Jhon,Snow", label: "Jhon,Snow", value: "Jhon.Snow@reliance.com" },
  // 其他选项...
];

4. 可选:显式指定Autocomplete的value

若仍存在值清空问题,可显式设置value属性,避免空值覆盖:

<Autocomplete
  // 其他属性保持不变
  value={field.value || null}
/>

内容的提问来源于stack exchange,提问作者John Snow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:27:26