Intro
์๋ ํ์ธ์. ์ด๋ฒ ์๊ฐ์๋ React useForm ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. React mui ํ ํ๋ฆฟ์ ์ดํด๋ณด๋ ๋์ค useForm ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ ์ฒ์ ๋ฐ๊ฒฌํ๊ฑฐ๋ ์! :)
UseForm?
useForm์ React์์ Form ๊ด๋ฆฌ๋ฅผ ๊ฐํธํ๊ฒ ํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋์ ๋๋ค. React Hooks๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํฉ๋๋ค. useForm์ ์ฌ์ฉํ๋ฉด ์ํ ๊ด๋ฆฌ์ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฑ์ ๋ณต์กํ ํผ ๊ด๋ จ ์์ ์ ๊ฐ์ํํ ์ ์์ด ๊ฐ๋ฐ์๋ค์ด ํผ์ ๋ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ด๊ณ ์ฝ๋์ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํต๋๋ค.
UseForm's function
- Form ์ํ ๊ด๋ฆฌ : useForm ํ ์ ์ฌ์ฉํ์ฌ ํผ์ ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ ํผ ํ๋์ ๊ฐ์ ์ถ์ ํ๊ณ , ์ ํจ์ฑ ๊ฒ์ฌ์ ๊ฐ์ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
- Form submit ๊ด๋ฆฌ: ํผ์ ์ ์ถ์ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ ์ค๋๋ค. onSubmit ํธ๋ค๋ฌ๋ฅผ ์ค์ ํ๊ณ , ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํต๊ณผํ ํ์๋ง ์ ์ถ์ ํ์ฉํ๋๋ก ํ ์ ์์ต๋๋ค.
- ์ ํจ์ฑ ๊ฒ์ฌ: ํผ ํ๋์ ๋ํ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ ํจ์ฑ ๊ฒ์ฌ๋ ์ฌ์ฉ์๊ฐ ํผ์ ์ ์ถํ๊ธฐ ์ ์ ์ ๋ ฅํ ๊ฐ์ด ์ ํจํ์ง ํ์ธํ๋ ์์ ์ ๋งํฉ๋๋ค.
- Form ์ด๊ธฐํ: ์ด๊ธฐํ ๋ฒํผ์ ํด๋ฆญํ๊ฑฐ๋ ๋ค์ ์ค์ ํ ๋ ํผ์ ์ด๊ธฐ ์ํ๋ก ๋๋๋ฆด ์ ์์ต๋๋ค.
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํตํฉ: useForm์ ๋ค๋ฅธ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Material UI ๋๋ Bootstrap๊ณผ ๊ฐ์ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.
Example
import React from 'react';
import { useForm } from 'react-hook-form';
function App() {
// useForm hook์ ์ฌ์ฉํ์ฌ ํผ ์ํ๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
const { register, handleSubmit, formState: { errors } } = useForm();
// ํผ ์ ์ถ ์ ์คํ๋ ํจ์
const onSubmit = (data) => {
console.log(data); // ํผ ๋ฐ์ดํฐ ์ถ๋ ฅ
};
return (
<div>
<h1>Signup Form</h1>
<form onSubmit={handleSubmit(onSubmit)}>
<div>
<label>Name:</label>
{/* register ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ํ๋๋ฅผ ๋ฑ๋กํฉ๋๋ค. */}
<input type="text" {...register('name', { required: true })} />
{/* ํ๋ ์ ํจ์ฑ ๊ฒ์ฌ ์๋ฌ ์ถ๋ ฅ */}
{errors.name && <span>Name is required</span>}
</div>
<div>
<label>Email:</label>
<input type="email" {...register('email', { required: true })} />
{errors.email && <span>Email is required</span>}
</div>
<div>
<label>Password:</label>
<input type="password" {...register('password', { required: true, minLength: 6 })} />
{errors.password && <span>Password is required (min length 6)</span>}
</div>
<button type="submit">Submit</button>
</form>
</div>
);
}
export default App;
์ด ์์ ์์๋ useForm ํ ์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ํ์๊ฐ์ ํผ์ ๋ง๋ค์์ต๋๋ค. register ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ ๋ ฅ ํ๋๋ฅผ ๋ฑ๋กํ๊ณ , ํ์์ ๋ฐ๋ผ ์ ํจ์ฑ ๊ฒ์ฌ ๊ท์น์ ์ ๊ณตํ์ต๋๋ค. handleSubmit ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํผ ์ ์ถ์ ์ฒ๋ฆฌํ๊ณ , ์ ์ถ ์์๋ ์ง์ ๋ onSubmit ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค. ์ ํจ์ฑ ๊ฒ์ฌ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ์๋ฌ๊ฐ ํ์๋ฉ๋๋ค.