MUI 自动完成的 'defaultValue' 在与 react-hook-form 的控制器一起使用时不起作用
MUI Autocomplete's 'defaultValue' not working when used with Controller of react-hook-form
我正在尝试将 MUI 的自动完成与 react-hook-form 结合使用。我在 React Hook Form 的控制器中包装了一个自动完成组件。当我尝试将 defaultValue 设置为自动完成时它不起作用,当我尝试更改预设值时自动完成组件中断。
这是我的代码片段。
<Controller
name="combo-box-demo"
control={control}
defaultValue={top100Films.find(film => film.year === selectedFilmYear)}
as={
<Autocomplete
id="combo-box-demo"
options={top100Films}
getOptionLabel={option => option.title}
style={{ width: 300 }}
renderInput={params => (
<TextField {...params} label="Combo box" variant="outlined" />
)}
/>
}
/>
工作演示代码的沙盒 link 是 here。
您应该在 Controller
和 return 所选对象值
上添加一个 onChange
道具
然后您还可以实现 getOptionSelected
AutoComplete
export default function ComboBox() {
const { control } = useForm({});
const [selectedFilmYear, setSelectedFilmYear] = React.useState(1994);
return (
<Controller
name="combo-box-demo"
control={control}
defaultValue={top100Films.find(film => film.year === selectedFilmYear)}
onChange={([val, obj]) => obj}
as={
<Autocomplete
id="combo-box-demo"
options={top100Films}
getOptionSelected={(obj, newval) => obj.name === newval.name}
getOptionLabel={option => option.title}
style={{ width: 300 }}
renderInput={params => (
<TextField {...params} label="Combo box" variant="outlined" />
)}
/>
}
/>
);
}
我正在尝试将 MUI 的自动完成与 react-hook-form 结合使用。我在 React Hook Form 的控制器中包装了一个自动完成组件。当我尝试将 defaultValue 设置为自动完成时它不起作用,当我尝试更改预设值时自动完成组件中断。 这是我的代码片段。
<Controller
name="combo-box-demo"
control={control}
defaultValue={top100Films.find(film => film.year === selectedFilmYear)}
as={
<Autocomplete
id="combo-box-demo"
options={top100Films}
getOptionLabel={option => option.title}
style={{ width: 300 }}
renderInput={params => (
<TextField {...params} label="Combo box" variant="outlined" />
)}
/>
}
/>
工作演示代码的沙盒 link 是 here。
您应该在 Controller
和 return 所选对象值
onChange
道具
然后您还可以实现 getOptionSelected
AutoComplete
export default function ComboBox() {
const { control } = useForm({});
const [selectedFilmYear, setSelectedFilmYear] = React.useState(1994);
return (
<Controller
name="combo-box-demo"
control={control}
defaultValue={top100Films.find(film => film.year === selectedFilmYear)}
onChange={([val, obj]) => obj}
as={
<Autocomplete
id="combo-box-demo"
options={top100Films}
getOptionSelected={(obj, newval) => obj.name === newval.name}
getOptionLabel={option => option.title}
style={{ width: 300 }}
renderInput={params => (
<TextField {...params} label="Combo box" variant="outlined" />
)}
/>
}
/>
);
}