☝🏻사용하기
- 설치
yarn add formik
- 임포트
import { useFormik } from 'formik';
const formik = useFormik({
//<Form> value값
initialValues: {
userName: "",
pw: "",
},
//submit할 때 호출되는 함수
onSubmit: (values) => {
// dispatch 자리
dispatch(actionLoginForDb(values));
},
});
return (
//handleSubmit : onSubmit 핸들러
<FromBox name="registerForm" onSubmit={formik.handleSubmit}>
<fieldset>
{/* 닉네임 input */}
<Input
id="userId"
name="userId"
type="userId"
//handleChange : 각 <input>, <select>, <textarea>에 전달하는 change 핸들러
_onChange={formik.handleChange}
//values : 폼의 현재 value
value={formik.values.userId}
/>
{formik.touched.userId && formik.errors.userId ? (
<HelperMsg>{formik.errors.userId}</HelperMsg>
) : null}
{/* 비밀번호 input */}
<Input
id="pwd"
name="pwd"
type="password"
_onChange={formik.handleChange}
value={formik.values.pwd}
/>
{formik.touched.pwd && formik.errors.pwd ? (
<HelperMsg>{formik.errors.pwd}</HelperMsg>
) : null}
{/* 로그인 버튼 */}
<InputBtn type="submit" value="로그인" />
</fieldset>
</FromBox>
)
☝🏻사용하기
- 설치
yarn add yup
- 임포트
import * as Yup from 'yup';
const formik = useFormik({
initialValues: {
userId: "",
pwd: "",
},
//yup 추가
validationSchema: Yup.object({
userId: Yup.string()
.email("이메일 형식이 아닙니다.")
.required("아이디를 입력해주세요!"),
pwd: Yup.string()
.min(4, "비밀번호는 4자리 이상이여야 합니다.")
.matches(/[a-zA-Z]/, "패스워드에는 반드시 영문을 포함해야합니다.")
.required("패스워드를 입력해주세요."),
}),
onSubmit: (values) => {
// dispatch 자리
dispatch(actionLoginForDb(values));
},
});
<Input
id="userId"
type="userId"
_onChange={formik.handleChange}
value={formik.values.userId}
/>
{formik.touched.userId && formik.errors.userId ? (
<HelperMsg>{formik.errors.userId}</HelperMsg>
) : null}
☝🏻 사용하기
- 설치
yarn add react-hook-form
- 임포트
import { useForm } from "react-hook-form";
import { useForm } from 'react-hook-form';
...
const { handleSubmit } = useForm();
const saveBtnClick = () => { // preventDefault() 제거
onSaveButtonClick(inputData);
resetForm();
}
...
return (
<form onSubmit={handleSubmit(saveBtnClick)}>
...
</form>
)
const { handleSubmit, register } = useForm();
//input 태그에 아래와 같이 ref = { register ( { ... } ) } 추가, name 속성이 반드시 필요
//required 는 필수 값 체크
//min,max,minLength,maxLength,pattern,validate
<div>
제목 : <input type="text" name="boardTitle" ref={register({ required: true })} onChange={changeInput} value={inputData.boardTitle} />
</div>
const { handleSubmit, register, errors } = useForm();
<div>
내용 : <input type="text" name="boardContent" ref={register({required: true, minLength: 5})} onChange={changeInput} value={inputData.boardContent} />
{errors.boardContent && (errors.boardContent.type == 'required' && '내용을 입력해주세요') || '최소 5글자 입력해주세요'}
</div>
참조