[개발] react-hook-form - React 기반 form 라이브러리

react 기반의 form handling 을 위한 라이브러리인 react-hook-form을 공부해보았습니다.

form 구현을 쉽게 할 수 있도록 validation, 초기화 등의 기능들을 제공하고 있고 코드를 이해하는데 크게 어려움이 없습니다. 그리고 로딩 속도가 빠르다고 공식 사이트에 자랑을 하고 있네요.

아래는 소스 예제 입니다.

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

export default function App() {
  const {
    register,
    handleSubmit,
    formState: { errors }
  } = useForm();

  const onValid = (data) => {
    console.log("[onvalid] ", data);
  };

  const onInvalid = (errors) => {
    console.log("[errors] ", errors);
  };

  return (
    <form onSubmit={handleSubmit(onValid, onInvalid)}>
      <label htmlFor="name">Name</label>
      <input
        id="name"
        {...register("name", {
          required: "필수 입력 값 입니다.",
          minLength: 5,
          maxLength: { value: 10, message: "최대 글자수 초과!" },
          validate: (value) => (value !== "admin" ? true : "admin 금지!")
        })}
      />
      {errors.name && errors.name.type === "required" && (
        <span>{errors.name.message}</span>
      )}
      {errors.name && errors.name.type === "maxLength" && (
        <span>Max length exceeded</span>
      )}
      <input type="submit" />
    </form>
  );
}


실행 결과

오류가 발생한 컴포넌트에 자동으로 커서 이동 등의 기본적인 기능 지원 외에도, 예제의 input 태그 내 register 함수를 이용하여 validation을 위한 조건 값을 지정 할 수 있습니다.

validation에서 오류 발생 시 onInvalid 함수가 호출되며, 정상 입력의 경우 onvalid 함수가 호출되며 각각의 함수에 필요한 코드 작성하면 됩니다.

input 태그의 기본 속성들을 추가하거나 에러 메시지를 지정할 수 있으며, 사용자 정의 함수를 추가하여 체크할 수도 있습니다.

 validate: (value) => (value !== "admin" ? true : "admin 금지!")

validate 를 통해 유효한 값이면 true를 리턴하고, 오류 일 경우 에러 메시지를 리턴 하면 oninvalid 에서 확인 가능합니다.

code sandbox

Sort:  

@honeybeerbear transfered 3 KRWP to @krwp.burn. voting percent : 78.55%, voting power : 16.58%, steem power : 1953472.21, STU KRW : 1200.
@honeybeerbear staking status : 2150 KRWP
@honeybeerbear limit for KRWP voting service : 2.15 KRWP (rate : 0.001)
What you sent : 3 KRWP
Refund balance : 0.85 KRWP [63263179 - ed7c40efc20d98a153a14e2ef20ad42e95c269bc]

Upvoted! Thank you for supporting witness @jswit.
Please check my new project, STEEM.NFT. Thank you!
default.jpg

Coin Marketplace

STEEM 0.04
TRX 0.32
JST 0.081
BTC 61409.26
ETH 1609.40
USDT 1.00
SBD 0.47