Как лучше всего проверять соответствие полей ввода при работе с React-hook-form? Например, при сопоставлении email
входных данных и т. Д. c.
При проверке соответствия электронной почты с помощью React-hook-form обнаружена проблема при попытке отделить сообщения об ошибках от «связанных элементов» посредством их проверки. метод. ref
принимает только один аргумент, который используется для формы React-hook register
, при этом необходимо использовать useRef
для доступа к current.value
для сопоставления значений, как показано ниже:
import React, { useRef } from "react";
import ReactDOM from "react-dom";
import { useForm } from "react-hook-form";
function App() {
const { register, handleSubmit, errors } = useForm();
const inputEmail = useRef(null)
const onSubmit = data => {
console.log('onSubmit: ', JSON.stringify(data))
}
return (
<form onSubmit={handleSubmit(onSubmit)}>
<label htmlFor="email">Email</label>
<input
name="email"
type="email"
ref={inputEmail}
/>
{/* desired: show `email` error message */}
<label htmlFor="email">Email confirmation</label>
<input
name="emailConfirmation"
type="email"
ref={register({
validate: {
emailEqual: value => (value === inputEmail.current.value) || 'Email confirmation error!',
}
})}
/>
{errors.emailConfirmation && <p>{errors.emailConfirmation.message}</p>}
<input type="submit" />
</form>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Хотя этот шаблон, по-видимому, является опцией при сопоставлении полей ввода, он не очень хорошо работает с React-hook-form!
Например, сообщение об ошибке связано только с одним регистром ввода и не имеет отдельных сообщений для каждому независимому полю или одному из полей ввода не присвоен регистр, это означает, что свойство required
не установлено, и т. д. c.
Итак, я изучаю хорошая практика или шаблон, который решает:
- Хранение сообщений об ошибках, разделенных полем ввода
- Метод проверки при проверке соответствия должен иметь возможность ссылаться на значение поля-близнеца в React совместимый способ, а не через DOM (document.querySelector, et c)