yarn add react-hook-form
// or
npm install react-hook-form
React Hooks Form을 적용하고 싶다면 먼저 useForm()
이라는 hook을 불러와야한다
React Hooks Form의 거의 모든 기능은 이 hook에서 나오는데,
그 중 몇 가지만 알아도 React Hooks Form의 대부분의 기능을 사용할 수 있
import { useForm } from 'react-hook-form';
const {
register, // input에서 값을 불러오기 위한 함수
handleSubmit, // React-Hook-Form에서 Submit을 관리하기 위해 만든 함수
watch, // input에서 입력하는 값을 실시간으로 확인하기 위한 함수
} = useForm<InputType>();
register
input에서 값을 불러오기 위한 함수
input
태그에 {...register('사용하고 싶은 이름')}
을 입력한다.
사용하고 싶은 이름
은 input
태그의 name
의 역할과 비슷하다?!
<input
type="text"
placeholder="Todo 제목을 입력해보세요!"
{...register('title')}
/>
watch
input에서 입력하는 값을 실시간으로 확인하기 위한 함수
입력한 값을 불러올 땐 watch
함수를 사용.
console.log(watch()); // 콘솔에서 실시간으로 확인 가능
handleSubmit
React-Hook-Form에서 Submit을 관리하기 위해 만든 함수
handleSubmit
은 함수를 인자로 받으며 그 함수에 data
를 인자를 넘겨준다.
handleSubmit
이 넘겨주는 데이터는 watch
함수가 가장 마지막으로 출력하는 데이터const TodoCreator: NextPage = (): JSX.Element => {
const [todos, setTodos] = useRecoilState<TodosTypes[]>(todosState);
const { register, handleSubmit, watch } = useForm<InputType>();
const addItem = () => {
const nextId: number =
todos.length > 0 ? todos[todos.length - 1].id + 1 : 0;
const result = watch();
const todo: TodosTypes = {
id: nextId,
title: result.title,
body: result.body,
};
mutate(todo);
setTodos([...todos, todo]);
};
return (
<form onSubmit={handleSubmit(addItem)}>
<div className="inputWrap">
<input
type="text"
placeholder="Todo 제목을 입력해보세요!"
{...register('title')}
/>
<input
type="text"
placeholder="Todo 내용을 입력해보세요!"
{...register('body')}
/>
</div>
<input className="button" type="submit" value="등록" />
</form>
);
};
<input {...register("firstName", { required: true, maxLength: 20 })} />
<input type="number" {...register("age", { min: 18, max: 99 })} />
<input {...register("lastName", { pattern: /^[A-Za-z]+$/i })} />
<input
type="text"
placeholder="Todo 제목을 입력해보세요!"
{...(register('title'), { required: true })}
/>