Material UI 无法设置自动完成的默认值
Material UI unable to set default value on Autocomplete
我正在使用 React Hook Form 在从 API 加载数据时设置 gender
自动完成的值。但是自动完成似乎没有设置数据。
我的主要组件如下所示:
// this function is used to set the default form values. for now, its just gender value
const setFormValues = () => {
setValue("gender", {id: 'male', name: 'Male'})
};
而在 useEffect 中,每当数据加载完成时,我就是 运行 上面的函数。
// prerequisites consists of many objects. gender is one of them
useEffect(() => {
setFormValues();
}, [prerequisites]);
组件如下所示:
<Controller
name={name}
control={control}
render={({field: {onChange}}) => (
<Autocomplete
onChange={(e, data) => onChange(data?.[onChangeAttribute])}
options={options || []}
getOptionLabel={(option) => option.name}
isOptionEqualToValue={(option, value) => option.id === value.id}
renderInput={(params) => <TextField {...params} placeholder="test" label="test"/>}
/>
)}
/>
然后我继续查看指向我 this 的文档。基本上,我可以传递一个默认值。然后我继续创建状态并从 setFormValues()
函数设置该状态。状态设置正确。但是当我将它传递给 defaultValue
时,该值未被设置,而是显示错误不受控制的组件被用作受控组件并将其用作受控组件。
我想做什么:
我的想法是设置来自对 useEffect 的 API 调用的默认值。基本上,该页面是 'edit' 页面,我想显示当前选择。
您未在 <Autocomplete />
上设置 value
属性。
<Controller
name={name}
control={control}
render={({field: {onChange, value}}) => (
<Autocomplete
onChange={(e, data) => onChange(data?.[onChangeAttribute])}
options={options || []}
value={value}
getOptionLabel={(option) => option.name}
isOptionEqualToValue={(option, value) => option.id === value.id}
renderInput={(params) => <TextField {...params} placeholder="test" label="test"/>
}
/>
)}
/>
当您的 API 调用应该 return 其他形式的值时,您也可以只使用 RHF 的 reset
。
useEffect(() => {
reset(prerequisites);
}, [prerequisites]);
不要设置默认值,而是尝试让状态具有您想要的默认值,然后设置 value={thestate}
,这样 onChange
应该更改相同的状态。
我正在使用 React Hook Form 在从 API 加载数据时设置 gender
自动完成的值。但是自动完成似乎没有设置数据。
我的主要组件如下所示:
// this function is used to set the default form values. for now, its just gender value
const setFormValues = () => {
setValue("gender", {id: 'male', name: 'Male'})
};
而在 useEffect 中,每当数据加载完成时,我就是 运行 上面的函数。
// prerequisites consists of many objects. gender is one of them
useEffect(() => {
setFormValues();
}, [prerequisites]);
组件如下所示:
<Controller
name={name}
control={control}
render={({field: {onChange}}) => (
<Autocomplete
onChange={(e, data) => onChange(data?.[onChangeAttribute])}
options={options || []}
getOptionLabel={(option) => option.name}
isOptionEqualToValue={(option, value) => option.id === value.id}
renderInput={(params) => <TextField {...params} placeholder="test" label="test"/>}
/>
)}
/>
然后我继续查看指向我 this 的文档。基本上,我可以传递一个默认值。然后我继续创建状态并从 setFormValues()
函数设置该状态。状态设置正确。但是当我将它传递给 defaultValue
时,该值未被设置,而是显示错误不受控制的组件被用作受控组件并将其用作受控组件。
我想做什么:
我的想法是设置来自对 useEffect 的 API 调用的默认值。基本上,该页面是 'edit' 页面,我想显示当前选择。
您未在 <Autocomplete />
上设置 value
属性。
<Controller
name={name}
control={control}
render={({field: {onChange, value}}) => (
<Autocomplete
onChange={(e, data) => onChange(data?.[onChangeAttribute])}
options={options || []}
value={value}
getOptionLabel={(option) => option.name}
isOptionEqualToValue={(option, value) => option.id === value.id}
renderInput={(params) => <TextField {...params} placeholder="test" label="test"/>
}
/>
)}
/>
当您的 API 调用应该 return 其他形式的值时,您也可以只使用 RHF 的 reset
。
useEffect(() => {
reset(prerequisites);
}, [prerequisites]);
不要设置默认值,而是尝试让状态具有您想要的默认值,然后设置 value={thestate}
,这样 onChange
应该更改相同的状态。