ReactJS/개념정리

[REACT] React Hook Form

xowoony 2023. 4. 16. 16:13

학습일 : 2023. 04. 16


React Hook Form 은
리액트에서 form으로 작업하는 경우 좋은 방법 중 하나이다.



onChange 이벤트, value, useState 등등 이러한 것들을

React Hook Form의 register 함수가 대체해주게 될 것이다.



사용을 위해 터미널에 입력 후 설치한다.

npm install react-hook-form




react-hook-form의 힘(?)을 사용하기 위해서는useForm이라는 hook을 import해야한다.

import { useForm } from "react-hook-form";




register함수에는 문자열을 보내주어야 하는데 그것은 name이 된다.
console.log(register("toDo")); 해보면


개발자도구에 이런 것들이 찍혀나오는 것을 볼 수 있다.





이제 input에 register함수가 반환하는 것들을 주면 된다.
onBlur 이벤트, onChange 이벤트, ref, name 이 있음.



 

 

 

<ToDoList.tsx>

  useForm 함수는 많은 것들을 제공하는데, 그 중 하나는 watch이다.
  watch는 form의 입력값들의 변화를 관찰 할 수 있게 해주는 함수이다.

function ToDoList() {
  const { register, watch } = useForm();
  console.log(watch());
  return (
    <div>
      <form>
        <input
          {...register("toDo")}
          placeholder="오늘 해야할 일을 입력하세요"
        />
        <button>추가</button>
      </form>
    </div>
  );
}

export default ToDoList;

 

 


실행결과

 

 

useState 어쩌고 저쩌고

길게 그리고 귀찮게 써주었던 

일련의 모든 과정이 이 한줄의 코드로 해결이 되어버린 것이다.

  const { register, watch } = useForm();

 

 

그리고

이렇게 input이 많아진다고 가정하였을 때에도

각각의 input마다 state를 적어주지 않아도 된다.

import { useForm } from "react-hook-form";

function ToDoList() {
  const { register, watch } = useForm();
  console.log(watch());
  return (
    <div>
      <form>
        <input {...register("email")} placeholder="email을 입력해주세요." />
        <input
          {...register("firstname")}
          placeholder="firstname을 입력해주세요."
        />
        <input
          {...register("Lastname")}
          placeholder="Lastname을 입력해주세요."
        />
        <input
          {...register("username")}
          placeholder="username을 입력해주세요."
        />
        <input
          {...register("password")}
          placeholder="password을 입력해주세요."
        />
        <input
          {...register("password1")}
          placeholder="password1을 입력해주세요."
        />
        <button>추가</button>
      </form>
    </div>
  );
}

export default ToDoList;

 

 

위대하다 위대해