react hook form

๋ฆฌ์ถฉ๋…•ยท2024๋…„ 1์›” 12์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
24/29

๐Ÿ“‹ react hook form

React ๊ธฐ๋ฐ˜์˜ ํผ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ํผ ์ƒํƒœ์™€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„ํŽธํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.
ํผ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ฝ”๋“œ ์–‘์„ ๋Œ€ํญ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
ํผ ์š”์†Œ์˜ ๊ฐ’์ด๋‚˜ ์ƒํƒœ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ช…์‹œ์ ์ธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด, ๋‹จ์ˆœํžˆ Hook(useForm, useController, useWatch...)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ ํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.


ํ•ต์‹ฌ ๊ฐœ๋…

useForm

react hook form์˜ ํ•ต์‹ฌ ํ•จ์ˆ˜๋กœ ํผ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํผ ๋ฐ์ดํ„ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

register

ํ•จ์ˆ˜๋กœ ์ž…๋ ฅ ํ•„๋“œ๋ฅผ react hook form์— ๋“ฑ๋กํ•œ๋‹ค.
์ž…๋ ฅ ํ•„๋“œ์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™, ๊ธฐ๋ณธ๊ฐ’ ๋“ฑ์„ ์„ค์ • ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

const Login = () => {
    const {register} = useForm();

    console.log(register("id"));

  return (
    <form>
        <input
            placeholder="์•„์ด๋””"
            type="text"
            {...register("id")}
        />
        <input
            placeholder="๋น„๋ฐ€๋ฒˆํ˜ธ"
            type="password"
            {...register("pw")}
        />
        <button>์ œ์ถœ</button>
    </form>
  )
}

watch

ํผ์˜ ์ž…๋ ฅ๊ฐ’์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜
์ž…๋ ฅ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ž…๋ ฅ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

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

const Login = () => {
    const {register, watch} = useForm();

    console.log(watch());

  return (
    <form>
        <input
            placeholder="์•„์ด๋””"
            type="text"
            {...register("id")}
        />
        <input
            placeholder="๋น„๋ฐ€๋ฒˆํ˜ธ"
            type="password"
            {...register("pw")}
        />
        <button>์ œ์ถœ</button>
    </form>
  )
}

handleSubmit

ํผ ์ œ์ถœ ์‹œ ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค.

handleSubmit์„ ์‚ฌ์šฉํ•˜๋ฉด ํผ ์ œ์ถœ ์‹œ ์ƒˆ๋กœ๊ณ ์นจ ํ˜„์ƒ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. (event.preventDefault() ํผ ์ œ์ถœ ๋ฐฉ์ง€ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š” ์—†์Œ)

๋‘ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๊ฐ–๋Š”๋ฐ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ํšจํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜
  • ๋‘ ๋ฒˆ์งธ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜

์ฒซ ๋ฒˆ์งธ ์ธ์ž๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ํšจํ•  ๋•Œ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์ˆ˜๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

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

const ToDoList = () => {
    const {register, watch, handleSubmit} = useForm();

    const onValid = (data : any) => {
        console.log(data);
    }

    console.log(watch());

  return (
    <form onSubmit={handleSubmit(onValid)}>
        <input
            placeholder="์•„์ด๋””"
            type="text"
            {...register("id")}
        />
        <input
            placeholder="๋น„๋ฐ€๋ฒˆํ˜ธ"
            type="password"
            {...register("pw")}
        />
        <button>์ œ์ถœ</button>
    </form>
  )
}

์ฐธ๊ณ 

react hook form ๊ณต์‹๋ฌธ์„œ
๋…ธ๋งˆ๋“œ์ฝ”๋”

0๊ฐœ์˜ ๋Œ“๊ธ€