๐ก ์ค๋์ react-hook-form, yup ์ ๋ฐฐ์ ๋ค! ๊ฐ๋ ์ ๋ธ๋ก๊ทธ์์ ์ ๊ธฐ๋ก ํ๊ณ , ๊ณผ์ ํ๋ฉด์ ์ดํดํ๊ณ ์๊ฒ๋ ๊ฒ๋ค์ ๊ฐ๋จํ๊ฒ ๊ธฐ๋ก๊ธฐ๋ก
์์ฑ์, ๋น๋ฐ๋ฒํธ, ์ ๋ชฉ, ๋ด์ฉ ์ ๋ ฅ์ฐฝ์ ๋ง๋ค๊ณ , ๊ฒ์๋ฌผ ๋ฑ๋กํ๊ธฐ ๋ฒํผ์ ๋ง๋ค๊ธฐ!
import { useForm } from "react-hook-form";
export default function ReactHookForm() {
const { register, handleSubmit } = useForm();
const onClickSubmit = (data) => {
console.log(data);
};
return (
<form onSubmit={handleSubmit(onClickSubmit)}>
์์ฑ์ <input type="text" {...register("writer")} />
๋น๋ฐ๋ฒํธ <input type="password" {...register("password")} />
์ ๋ชฉ <input type="text" {...register("title")} />
๋ด์ฉ <input type="text" {...register("contents")} />
<button>๋ฑ๋กํ๊ธฐ</button>
</form>
);
}
โ๏ธ ์ ์ฝ๋์์
const { register, handleSubmit } = useForm();
์์ register, handleSubmit์ด ๋ญ๊น... ๋ชจ๋ฅด๊ฒ ์ด์ ์์๋ณธ ๊ฒฐ๊ณผ, register๋ input์ฐฝ"writer"
์ ์ ํ ๊ฐ๋ค์ ๋ถ๋ฌ์จ๋ค. ์์ฝ๋๋ฅผ ์คํ์ํค๊ณ ์ธํ์ฐฝ์'์๋ !'
์ด๋ผ๊ณ ์ ์ผ๋ฉด ์ฝ์์์ ๊ฐ์ฒด์์writer:"์๋ !"
์ ๋ณผ ์๊ฐ ์์๋ค. โก๏ธ writer ๋ฅผ title๋ก ๋ฐ๊พธ๋ฉด title์์ ๊ฐ์ด ๋ถ๋ฌ์์ง๋ค. ์ผ๋จ์ key ๋ค์ ์์ฑ์ด๋ผ๊ณ ์ดํดํ๋ค.
โ๏ธ
<form onSubmit={handleSubmit(onClickSubmit)}>
์ ์ ํ onSubmit์ Submit๋ง ํด์ฃผ๋๊ฒ ์๋๋ค. ์คํ๋๋ ํจ์๋onClick
ํจ์์๋๋ฐ, react-hook-form ์์๋ ์ด๋ ๊ฒ ์จ์ฃผ๋๋ณด๋ค.โ๏ธ
handleSubmit
์ ๋ฐ์ธ๋ฉํด์ผ ์ง์ง๋ก ์คํ์์ผ์ค ํจ์๋ค์ด ์คํ๋ ์ ์๋ค.
โ๏ธ handleSubmit์ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ์ผ๋ฉฐ ๊ทธ ํจ์์ data๋ผ๋ ์ธ์๋ฅผ ๋๊ฒจ์ฃผ์ง๋ง (data)์์data
๋ddd
๋ผ๊ณ ๋ฐ๊ฟ๋ ์คํ์ด ๋๋๋ผ!
โ๏ธ input์ ์ฐํ๋ ๊ฐ์watch
๋ผ๋ ์ต์ ์ ์ด์ฉํด์ ๊บผ๋ด๋ณผ ์ ์๋ค๊ณ ํ๋ค.
์์ ๋ง๋ ํผ์ ์กฐ๊ฑด์ ์ค์ ํ๊ณ , ๋ง์ง ์์ผ๋ฉด yup์ ์ด์ฉํ์ฌ ์๋ฌ๋ฉ์ธ์ง๋ฅผ ๋์ ๋ค.
1-1) ์์ฑ์๋ 5๊ธ์ ์ด๋ด ๋ฌธ์์ด
1-2) ๋น๋ฐ๋ฒํธ๋ ์๋ฌธ, ์ซ์, ํน์๋ฌธ์๋ฅผ ํฌํจํ 8์๋ฆฌ ์ด๋ด ๋ฌธ์์ด
1-3) ์ ๋ชฉ์ 100์ ์ด๋ด ๋ฌธ์์ด, ๋ด์ฉ์ 1000์ ์ด๋ด ๋ฌธ์์ด
์ ์ฝ๋๊ฐ ๋ด๊ฐ ํ์๊ฐ ๋ฐ๋์ ์ก๊ณ ์๋ ์๋ฌ..! ๋ ธ๋๋ชจ๋์ฆ๊ฐ ์ด์ํ๊ฐ? ๋ถ๋ช ์์ฑ์ด ์๋๋ฐ ์ ์ ๋ฌ๋๊ฑฐ์ง ์ถ์ด์ ๋ ธ๋๋ชจ๋์ฆ ์ง์ ๋ค ๊น์๋ณด๊ณ ํ๋๋ฐ ์ ๋ ๊ทธ์ง(?)๋ฌธ์ ๊ฐ ์๋์์.ใ .ใ ใ ใ ..ใ ใ ใ ใ (๋์์ฃผ์ ์ฒ์ฌ๋๊ป ๊ฐ์ฌ..)
password: yup
.string()
.matches(
/(?=.*\d)(?=.*[~`!@#$%\^&*()-+=])(?=.*[a-zA-Z]).{1,8}$/,
"๋น๋ฐ๋ฒํธ๋ ์๋ฌธ, ์ซ์, ํน์๋ฌธ์๋ฅผ ํฌํจํ 8์๋ฆฌ ์ด๋ด๋ก ์
๋ ฅํด์ฃผ์ธ์"
),
์ด๋ ๊ฒ ํ์
์ง์ ์ ํด์ฃผ๋๊น ์๋ฌ๊ฐ ์ฌ๋ผ์ก๋ค. โก๏ธ .string()
์ถ๊ฐํ์!!!
๊ธฐ์กด์ useState๋ฅผ ์ฌ์ฉํด์ ์นด์ดํธ ๋ฒํผ์ ๋ง๋ค์๋ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๋ ๊ณผ์ ์๋ค.
๊ธฐ์กด ์ฝ๋๋ ์๋์ ๊ฐ๋ค!
import { useState } from "react";
export default function QuizPage() {
const [count, setCount] = useState(0);
const onClickCountUp = () => {
setCount((prev) => prev + 1);
};
return (
<>
<div>
<p>์ง๊ธ์ ์นด์ดํธ๋ {count} ์
๋๋ค!</p>
<button onClick={onClickCountUp}>Count up!</button>
</div>
</>
);
}
๋ฆฌํฉํ ๋ง ํ ์ฝ๋
import { useForm } from "react-hook-form"; export default function QuizPage() { const { handleSubmit, formState } = useForm(); const CountUp = () => {}; return ( <> <form onClick={handleSubmit(CountUp)}> <div>{formState.submitCount} </div> <button>Count up!</button> </form> </> ); }
์๋๋ state์ ๋ด์์ ์ฒ๋ฆฌํด์ฃผ๋๊ฒ์ ์ด๊ฑด ๋๋์ฒด ์ด๋์ ๋ญ ๋ด์ผ๋ผ๋๊ฑฐ์ง ํ๊ณ ์์๋๋ฐ
์์๋ณด๋ ์๋์ผ๋ก ํด์ฃผ๋ ์ต์
๋ค์ด ์์ฒญ ๋ง์์, ์ ์ฌ์ฉํ๋ฉด ๋ฌ์๋ค!
๋ด๊ฐ ์ฌ์ฉํ๊ฑด forState
์์ ์๋ submitCount
!!!
์ฌ์ฉํ๋,, ๊ทธ๋ฅ ์ง์ง {formState.submitCount}
์ด๋ ๊ฒ๋ง ์ ์ด์ฃผ๋ฉด ๋์ด์ ์์ฅฌ ํธ๋ฆฌํ๋ค.
์ด๋ค ์ต์
๋ค์ด ์๋์ง ์ ์๊ณ ์์ด์ผ ํ ๋ฏ!! ์ด๋ ต๋ค์ด๋ ค์