react-hock-form
- React에서 form의 validation 체크를 도와주는 라이브러리
- 불필요한 렌더링을 줄여준다.
- 코드가 단순해서 생상성이 증가한다.
yup
- react-hock-form이랑 함께 사용 가능한 validation 라이브러리
react-hock-form, yup 설치
npm install react-hook-form
npm install yup
react-hock-from + yup 사용 예
- FormProvider로 react-hock-form을 사용할 영역을 감싸준다.
- yup을 통해 validation을 체크할 yupResolver 객체를 생성
- useform
- register : react-hock-form과 연결할 때 사용한다.
- watch : react-hock-form의 변경을 감지한다.
- handlesubmit : FormProvider의 내부의 값을 submit 한다.
- formState : react-hock-form이 가지고 있는 값을 확인할 수 있다.
- setValue : react-hock-form value 값을 세팅한다.
- getValue: react-hock-form의 value 값을 얻어온다.
ex) TextInput
// register를 통해 react hock form 과 연결해줌
function TextInput({ name }: { name: string }) {
const {
register,
formState: { errors },
} = useFormContext();
return <input {...register(name)} />;
}
ex) JoinMemberTemplate
import ...
export interface UserSignUpBffRequest {
userId: string;
password: string;
userName: string;
email: string;
mobileNumber: string;
agreeTermsService: boolean;
}
export interface JoinMemberTemplateProps {
onSubmit: SubmitHandler<UserSignUpBffRequest>;
onError: SubmitErrorHandler<UserSignUpBffRequest>;
}
export function JoinMemberTemplate({ onSubmit, onError }: JoinMemberTemplateProps) {
// validation check할 yupResolver 객체 만들기
const schema = yup.object().shape({
userId: yup.string().test({
name: 'invalidId',
async test(value = '', { createError }) {
const { result, message } = validationJoinMemberId(value);
return !result
? createError({
message,
})
: true;
},
}),
email: yup.string().email('이메일 에러'),
agreeTermsService: yup.boolean().oneOf([true], '이용약관에러'),
});
const defaultSchema: UserSignUpBffRequest = {
userId: '',
password: '',
userName: '',
email: '',
mobileNumber: '',
agreeTermsService: false,
};
const methods = useForm({
mode: 'onChange',
resolver: yupResolver(schema),
defaultValues: {
...defaultSchema,
},
});
return (
<FormProvider {...methods}>
<form
onSubmit={methods.handleSubmit(
data => {
/* 생략 */
return onSubmit({
...data,
});
},
error => {
/* 생략 */
return onError({ ...error });
},
)}
>
/* 생략 */
<TextInput name="memberId" />
</form>
</FormProvider>
);
}
export default JoinMemberTemplate;
'React' 카테고리의 다른 글
[React] Mock Server Work Create Use Example (0) | 2023.06.02 |
---|---|
[Jest] React -Jest Qeury getBy,queryBy,findBy Example (0) | 2023.05.29 |
[Jest] React Testing Library Jest란? Jest Start (0) | 2023.05.28 |
[React] Zustand 란? 사용법 State 상태 관리 (0) | 2023.04.18 |
[React] APP 오픈 API CORS에러 NAVER geocode API (0) | 2023.04.08 |