gpt4 book ai didi

javascript - React Material UI Autocomplete 使用 React Hook Forms 问题

转载 作者:行者123 更新时间:2023-12-03 20:25:10 26 4
gpt4 key购买 nike

我在使用 Material UI 组件的 React Hook Forms 时遇到问题,我真的找不到这方面的资源。我有一个页面,我可以在其中获取国家和当前的个人资料信息,并且我想在表单中显示它。最初我想将国家设置为德国。

const [countries, setCountries] = useState([]);
const { control, handleSubmit, register, reset } = useForm();
const [currentProfile, setCurrentProfile] = useState<profiles.resProfileFields>();

useEffect(() => {
const getProfileData = async () => {
try {
const profile = await api.get(profiles.getById, { id: profileId });
if (profile != null && profile != undefined) {
setCurrentProfile(profile);
setcountryId(profile.country.id);
}

} catch (err) {
console.log(`error getting: ${err}`);
}
};
getProfileData();
getCountries();
}, [profileId]);


useEffect(() => {
reset(currentProfile);
}, [currentProfile]);

const getCountries = () => {
api
.get(routes.countries.list, {})
.then(res => {
setCountries(res);
})
.catch(err => { });
};

<form onSubmit={handleSubmit(onSubmit)}>


<TextField
inputRef={register}
name="name"
label="* Name"
InputLabelProps={{
shrink: true
}}
variant="outlined"
placeholder="Name"
className="form-item-full"
/>

<Controller
name="country"
as={
<Autocomplete
className="form-item"
options={countries}
getOptionLabel={option => option.name}
renderInput={params => (
<TextField
{...params}
inputRef={register}
label="Country"
placeholder="Select a Country"
InputLabelProps={{
shrink: true
}}
variant="outlined"
/>
)}
/>
}
defaultValue="Germany"
control={control}
/>
</form>
  • 我如何最初将值设置/重置为德国?
  • 提交时如何发布国家的ID?
  • 最佳答案

    codesandbox比尔建议你可以看到一个确切的例子。ControllerAutocomplete组件应如下所示:

        <Controller
    render={props => (
    <Autocomplete
    {...props}
    options={countries}
    getOptionLabel={option => option.name}
    renderInput={params => (
    <TextField
    {...params}
    label="Country"
    placeholder="Select a Country"
    InputLabelProps={{
    shrink: true
    }}
    variant="outlined"
    />
    )}
    onChange={(_, data) => props.onChange(data)}
    />
    )}
    name="country"
    control={control}
    />
    因为所选国家实际上是一个对象,所以您必须在 defaultValues 中设置德国国家对象。 :
    const { control, handleSubmit, register, reset } = useForm({ 
    defaultValues: {
    country: { name: 'Germany', id: 1234 },
    }
    });
    如果您不想在 defaultValues 中对国家/地区进行“硬编码”对象,您可以移动 getCountries调用一个级别并将其传递给表单。您现在可以在所有数据可用时有条件地呈现表单,并在国家列表中找到国家,如下所示:
    const MyForm = ({ countries }) => {
    const { control, handleSubmit, register, reset } = useForm({
    defaultValues: {
    country: countries.find(({ name }) => name === 'Germany'),
    }
    });

    关于javascript - React Material UI Autocomplete 使用 React Hook Forms 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63010485/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com