main project에서 로그인 회원가입 쪽 기능 구현을 맡게 되어 react-hook-form을 사용하게 되었다.
npm i react-hook-form
import { useform } from 'react-hook-form';
const { handleSubmit, register, ...등 } = useForm(여기에는 mode가 추가될 수 있다.)
mode
const { register, handleSubmit } = useForm({mode: "onChange"})
onChange mode는 input 값의 변화에 따라 에러 메시지의 유무를 변화시켜 주고 싶을 때 유용하다.
formState / isValid / isDirty
const {register, handleSubmit, formState: {errors, isValid, isDirty}} = useForm()
register
const Login = () => {
const loginButtonClick = async (data) => {
const { password } = data;
console.log(data);
}
return (
<>
<form onSubmit={handleSubmit(data => loginButtonClick(data))}>
<label htmlFor="password"></label>
<input
type: "password",
id: "password",
{...register("password", {
required: true,
pattern: passwordRegex // (정규표현식)
})}
/>
<button type="submit">로그인</button>
</form>
</>
)
}
// 버튼 클릭하면 input에 입력한 값이 data에 담기고,
// {password: 'input에 입력한 값'} 이 찍한다.
// 나중에 이 값을 이용하여 서버에 POST 요청을 보내 로그인을 시도할 수 있다.
회원 가입 폼을 작성하면서, 두가지 기능을 추가하고 싶었다.
1. input값의 변화에 따라 에러메시지를 보여주는 것이었고,
2. form의 모든 항목이 유효성 검사를 통과하면 버튼이 active해지는 것이었다.
구글에 'react-hook-form button disabled' 라고 검색하여 찾은 자료의 도움을 받아 두가지 기능을 구현할 수 있었다.
1. mode: "onChange"
2. formState와 isValid
https://stackoverflow.com/questions/65255298/how-to-conditionally-disable-the-submit-button-with-react-hook-form