我正在尝试使用自定义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
为onChange
in 的处理程序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
和setValue
inAutocomplete
有效。我使用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
为它设置一个,但它仍然表现得像那样。此外,由于不需要表单中的这些字段,我也不想从选项数组中设置默认值。
更新的沙盒在这里
任何帮助仍然非常感谢