#reactjs #react-hooks #react-hook-form
#reactjs #реагирующие крючки #react-hook-form
Вопрос:
Итак, я в основном новичок в-react-hook-form Я создал форму с управляемыми входами, где мои условия для 2-го ввода основаны на моем первом вводе. Мой 1-й ввод — это продолжительность, где у меня есть 2 варианта «Ежемесячно» и «Ежегодно». Мой 2-й ввод — это бюджет, где минимальный бюджет составляет 200 для ежемесячно и 400 для ежегодно.
Это мой код:
<div style={{ marginTop: theme.spacing(1) }}>
<Controller
as={Select}
row
name="duration"
control={control}
defaultValue="Monthly"
fullWidth
label={<FormattedMessage {...messages.duration} />}
margin="normal"
options={DURATION_OPTIONS}
rules={{
required: 'Required'
}}
/>
</div>
<div>
<Controller
as={NumberField}
row
name="budget"
control={control}
defaultValue="1000"
fullWidth
label={<FormattedMessage {...messages.howMuchBudget} />}
margin="normal"
rules={{
required: true,
min: {
value: 400,
message: 'Min is 400',
}
}}
/>
</div>
Теперь я хочу запустить свою 2-ю проверку поля на основе моей 1-й проверки поля динамически. если моя продолжительность выбрана ежемесячно, то минимальная проверка для 2-го ввода должна быть 200, а если моя продолжительность выбрана как годовая, то минимальная проверка для 2-го ввода должна быть 400.
Любая помощь будет высоко оценена.
Комментарии:
1. Вы можете использовать
getValues
для извлечения значений формы, а затем получить доступ к тем, которые вы хотите внутри вашей проверки: react-hook-form.com/api/#getValues2. Я пробовал это, но у меня не работает, можете ли вы предоставить реквизиты just rules с помощью getValues() ?
3. Эй, @Jayce444 нужен какой-то код для этого
Ответ №1:
Вот простой пример. В этом случае фамилия должна быть короче имени, иначе вы получите сообщение об ошибке.
function App() {
const { register, handleSubmit, errors, getValues } = useForm({mode:'onChange'});
const onSubmit = (data) => {
console.log(data);
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<label>First name</label>
<input name="firstName" defaultValue='Potato' ref={register} />
<label>Last name (must be shorter than first name)</label>
<input name="lastName" ref={register({
validate: {
shorterThanFirstName: value => value.length < getValues().firstName?.length,
}
})} />
{errors.lastName amp;amp; <p>Last name must be shorter than first name</p>}
<input type="submit" />
</form>
);
}
Комментарии:
1. Проверка здесь не будет запущена, если пользователь написал фамилию, а затем более короткое имя