我正在尝试使用自定义Material-UI Autocomplete组件并将其连接到react-hook-form.
TLDR:需要在没有 react-hook-form 控制器的情况下使用 MUI Autocomplete
defaultValue
我的自定义Autocomplete组件接受一个对象,其结构{_id:'', name: ''}显示名称并_id在选择选项时返回。Autocomplete作品就好了。
<Autocomplete
options={options}
getOptionLabel={option => option.name}
getOptionSelected={(option, value) => option._id === value._id}
onChange={(event, newValue, reason) => {
handler(name, reason === 'clear' ? null : newValue._id);
}}
renderInput={params => <TextField {...params} {...inputProps} />}
/>
为了使其与我一起工作,react-hook-form我将 设置setValues为onChangein 的处理程序Autocomplete并手动注册组件,useEffect如下所示
useEffect(() => {
register({ name: "country1" });
},[]);
这工作正常,但我不想有useEffect钩子,只是直接以某种方式使用寄存器。
接下来我尝试使用Controller组件 fromreact-hook-form在表单中正确注册字段而不使用useEffect钩子
<Controller
name="country2"
as={
<Autocomplete
options={options}
getOptionLabel={option => option.name}
getOptionSelected={(option, value) => option._id === value._id}
onChange={(event, newValue, reason) =>
reason === "clear" ? null : newValue._id
}
renderInput={params => (
<TextField {...params} label="Country" />
)}
/>
}
control={control}
/>
我已经更改了onChange组件Autocomplete中的直接返回值,但它似乎不起作用。
使用inputRef={register}on<TextField/>不会为我削减它,因为我想保存_id而不是name
这里是一个包含两种情况的工作沙箱。第一个 withuseEffect和setValueinAutocomplete有效。我使用Controller组件的第二次尝试
任何帮助表示赞赏。
乐
在比尔用 MUI 自动完成的工作沙箱发表评论后,我设法得到了一个功能结果
<Controller
name="country"
as={
<Autocomplete
options={options}
getOptionLabel={option => option.name}
getOptionSelected={(option, value) => option._id === value._id}
renderInput={params => <TextField {...params} label="Country" />}
/>
}
onChange={([, { _id }]) => _id}
control={control}
/>
唯一的问题是我MUI Error在控制台中得到一个
Material-UI:一个组件正在将 Autocomplete 的非受控值状态更改为被控制。
我试图defaultValue为它设置一个,但它仍然表现得像那样。此外,由于不需要表单中的这些字段,我也不想从选项数组中设置默认值。
更新的沙盒在这里
任何帮助仍然非常感谢