我有一个countries
数组,其中包含id
和name
。当前,我正在使用Material UI Autocomplete
元素,并且具有React Hook表单。提交表单时,我想获取国家/地区ID。目前,它正在发布国家名称。有没有一种方法可以发布ID而不是名称,而无需从名称中获取ID。
<Autocomplete
className="form-item"
options={countries}
getOptionLabel={option => option.name}
renderInput={params => (
<TextField
{...params}
inputRef={register}
label="Country"
name="country"
placeholder="Select a Country"
InputLabelProps={{
shrink: true
}}
variant="outlined"
/>
)}
/>
答案 0 :(得分:1)
使用react-hook-form的Controller并将整个Autocomplete
放入as
道具中。这样,提交表单时,您将获得所选选项的整个对象。
注意:在react-hook-form版本6.x onChange
is removed中,as道具将具有功能,您可以获得{{1} }作为参数。
onChange
注意:如果您使用的是v5x,请参见下面的演示和代码段。
<Controller
as={({ onChange }) => (
<Autocomplete
className="form-item"
options={countries}
onChange={(_, data) => onChange(data)}
getOptionLabel={option => option.label}
renderInput={params => (
<TextField
{...params}
label="Country"
placeholder="Select a Country"
InputLabelProps={{
shrink: true
}}
variant="outlined"
/>
)}
/>
)}
name="country"
control={control}
defaultValue={{ label: "The Shawshank Redemption", id: "1994" }}
/>
修改:基于评论 您可以使用setValue来基于api设置默认值。
代码段:
<Controller
as={
<Autocomplete
className="form-item"
options={countries}
getOptionLabel={option => option.label}
renderInput={params => (
<TextField
{...params}
label="Country"
placeholder="Select a Country"
InputLabelProps={{
shrink: true
}}
variant="outlined"
/>
)}
/>
}
name="country"
control={control}
onChange={([, data]) => data}
defaultValue={{ label: "The Shawshank Redemption", id: "1994" }}
/>
上面的演示v6已更新。
答案 1 :(得分:-1)
恐怕没有一种“简便”的方法来获取当前设置的ID。
但是,您可以加入Autocomplete#onChange
事件并使用value
道具来接管自动完成组件的内部值状态。这样就可以在组件中获得可用的值,并利用它来发挥自己的优势。
在下面的示例中,id在表单数据中将以country-id
的形式提供。
function CountryAutocomplete() {
const [value, setValue] = useState(); // `[]` for multiple
return (
<React.Fragment>
<Autocomplete
className="form-item"
value={value}
onChange={(event, value) => setValue(value)}
options={countries}
getOptionLabel={option => option.name}
renderInput={params => (
<TextField
{...params}
inputRef={register}
label="Country"
name="country"
placeholder="Select a Country"
InputLabelProps={{
shrink: true
}}
variant="outlined"
/>
)}
/>
<input value={value?.id} name="country-id" />
</React.Fragment>
);
}