React useForm으로 form 만들기
17612 단어 Reactvalidationhookuseformtech
React Hook Form
리액트로 폼을 만들 때 폼마다 useState로 입력값을 관리하고 폼을 직접 작성하는 검증 등이 어렵다.
그때는 리액트 훅 포엠
useForm
을 사용할 수 있었다.이번에는 다음 샘플의 사용 부분에 대해 설명하고 싶습니다.샘플의 디자인 사용tailwind CSS
소스 코드
공식 문서
설치하다.
$ npm install react-hook-form
// react18利用中にDependancyエラーの場合
// react18の場合まだ使えないため、後ろに --legacy-peer-deps をつけてインストールします
$ npm install react-hook-form --legacy-peer-deps
설치 후 import에서 사용할 수 있습니다.import { useForm } from "react-hook-form";
useForm 정보
// formで利用する値の
interface LoginForm {
email: string;
password: string;
}
// 利用するメソッドを定義しています。ここの今回メソッドを以下で説明します。
const {
register,
watch,
handleSubmit,
formState: { errors },
} = useForm<LoginForm>();
method
register
폼에서 입력한 값을state 관리와 검증 처리할 수 있습니다.
다음 소스 코드는 이메일 형식의 값을 받아들여 항목 입력에 필요한 검증 처리가 적혀 있습니다.
<div className="flex w-full flex-col">
<label className="text-sm text-gray-800" htmlFor="email">
Email
</label>
<input
{...register("email", { required: "emailを入力してください" })}
className="rounded-md border px-3 py-2 focus:border-2 focus:border-teal-500 focus:outline-none"
type="email"
name="email"
/>
</div>
watch
창의 값 수정을 감시할 수 있습니다.문서에는 체크 상자에서 선택을 한 후 창을 표시하는 예시가 포함되어 있습니다.
handleSubmit
자세submit을 할 때의 처리.
handleSubmit()
두 개의 매개 변수를 받아들인다.매개변수 1은 검증 처리 OK 시 함수이고 매개변수 2는 검증 처리 NG 시 함수입니다.
다음 소스 코드는password 검증이 실패했을 때 이렇게 console입니다.닫기
// バリデーション処理がOKの場合に呼ばれる関数
const isValid = (data: LoginForm) => {
console.log(data);
};
// バリデーション処理がNGの場合に呼ばれる関数
const isInValid = (erros: any) => {
console.log(errors);
console.log("Fail Login");
};
<form onSubmit={handleSubmit(isValid, isInValid)} className="flex w-full flex-col items-center space-y-5 ">
//省略
</form>
formState
object를 통해 폼의 상태를 관리합니다.
formState: { errors, isDirty, isSubmitting, touchedFields, submitCount }
여러 가지 상태를 사용할 수 있지만 여기서는 가장 많이 쓰는 것errors
만 설명한다.폼에 오류가 발생했을 때
errors.[項目名]
오류가 있는 Object입니다.{errors.password?.message}
와 같이 창에 잘못된 정보를 표시할 수 있습니다.<input
{...register("password", {
required: "passwordを入力してください",
minLength: { value: 8, message: "8文字以上入力してください" },
})}
className="rounded-md border px-3 py-2 focus:border-2 focus:border-teal-500 focus:outline-none"
type="password"
name="password"
/>
<div className="mt-1 font-semibold text-rose-500">
{errors.password?.message}
</div>
Props
이번에는 기본 onSubmit이므로 소스 코드에는 없습니다.
useForm 자체도 다양한 프로포즈를 받아 맞춤 제작할 수 있습니다.
useForm({
mode: 'onSubmit',
reValidateMode: 'onChange',
defaultValues: {},
resolver: undefined,
context: undefined,
criteriaMode: "firstError",
shouldFocusError: true,
shouldUnregister: false,
shouldUseNativeValidation: false,
delayError: undefined
})
그중mode
은 검증을 진행할 시간을 지정할 수 있다.onSubmit
기본값은 onSubmit입니다.submit 에서 오류가 발생했습니다.
onChange
입력할 때 오류가 발생합니다.
onBlur
input 이외를 눌렀을 때 오류가 발생했습니다.온블럽 샘플입니다.
const {
register,
watch,
handleSubmit,
formState: { errors },
} = useForm<LoginForm>();
총결산
useForm을 사용하면 상당히 간단하게 형식을 완성할 수 있습니다.
또 발리데이 샘플 등 친절하게 작성된 문서도 있으니 사용 시 꼭 읽어주시기 바랍니다.
Reference
이 문제에 관하여(React useForm으로 form 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/redpanda/articles/4dba043cd753e3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)