공식 홈페이지 : https://react-hook-form.com/
npm install react-hook-form
import { useState } from "react";
function ToDoList() {
const [todo, setTodo] = useState("");
//에러 만들기
const [toDoError, setToDoError] = useState("");
//onChange 이벤트
const onChange = (event: React.FormEvent<HTMLInputElement>) => {
const {
currentTarget: { value },
} = event;
setTodo(value);
};
//onSubmit 이벤트
const onSubmit = (event: React.FormEvent<HTMLFormElement>) => {
event.preventDefault();
//글자수가 10자 미만일 때 에러가 발생
if(todo.length < 10) {
return setToDoError("글자 수가 부족함")
}
setToDoError("");
console.log(todo);
};
return (
<div>
<form onSubmit={onSubmit}>
<input onChange={onChange} value={todo} placeholder="Write a to do" />
<button>Add</button>
{/* 에러표시 */}
{toDoError !== "" ? toDoError : null}
</form>
</div>
);
}
export default ToDoList;
import { useForm, SubmitHandler } from "react-hook-form";
//register name별로 타입 지정해줘야함 ㅡㅡ;
interface IFormInput {
firstName: String;
gender: GenderEnum;
}
const { register, handleSubmit } = useForm<IFormInput>();
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register("값의 이름")} />
...
{name: 'toDo', onChange: ƒ, onBlur: ƒ, ref: ƒ}
name: "toDo"
onBlur: async event => {…}
onChange: async event => {…}
ref: ref => {…}
[[Prototype]]: Object
이를 {...} 스프레드 문법으로 풀어내면 input에 name, onBlur, onChange, ref가 props로 들어감