- Published on
๐ ์ปฌ๋ฌ๋ฆฌ์คํธ ํ๋ก์ ํธ #19 VerticalForm - Form ์ถ์ํ
- ๊ธ์ด์ด
๐
Form ์ถ์ํ
ํ์๊ฐ์
ํ์ด์ง์ ๋ก๊ทธ์ธ ํ์ด์ง๋ ๋น์ทํ ์ฉ๋์ ํํ๋ฅผ ๊ฐ์ง form
์ ๊ฐ์ง๊ณ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ ํ์ด์ง์ form
์ ๊ฐ๊ฐ ๋ง๋ค๊ธฐ๋ณด๋ค, ์ถ์ํ๋ form
์ ๋ง๋ค์ด ๊ฐ๊ฐ์ ํ์ด์ง์
๋ง๊ฒ ๋ณํํ ์ ์๋ค๋ฉด ์ผ๊ด์ฑ์ด ๋์ ํ์ด์ง๋ฅผ ๋ง๋ค ์ ์๊ฒ๋๋ค.
- ๊ธฐ์กด์
Login
ํ์ด์ง์ ์๋form
๋ก๊ทธ์ธ ํ์ด์ง์์ ๊ฐ์ง๊ณ ์๋ ํ์ด์ง์ ์ ๋ชฉ๊ณผ ๋ฒํผ์์ ๋ค์ด๊ฐ๋ ํ
์คํธ๋ค์ ํ์ด์ง๋ง๋ค ๋ฐ๋๋ฏ๋ก
ํ์
์ ์ ํด์ฃผ๊ณ props
๋ก ๋นผ๋ธ๋ค. ๋ฒํผ ๊ฐ์ ๊ฒฝ์ฐ ๋ฒํผ ์์ฒด ์ปดํฌ๋ํธ๋ฅผ ๋ฉ์ด๋ฆฌ๋ก ์ด๋ํ๋๊ฒ ๋ ์ข์ผ๋ฏ๋ก,
๊ณ ์ฐจ ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํด ์ปดํฌ๋ํธ ์ ์ฒด๋ฅผ after
๋ผ๋ ํ์
์ ๋ฃ์ด ์ฒ๋ฆฌํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ input
๋ค์ children
์ผ๋ก ๋ง๋ค์ด VerticalForm
์์ fragment
๋ฅผ ๋ฃ๊ณ
(VerticalForm
์์๋ ํ๋์ <>
๋ง ๋ฃ์ ์ ์์ผ๋ฏ๋ก )
๊ทธ ์์ ์ฎ๊ฒจ์ค๋ค.
import { useForm } from 'react-hook-form'
import { Link } from 'react-router-dom'
import Button from '~/components/Button'
import VerticalForm from '~/components/VerticalForm'
function Register() {
const {
register,
handleSubmit,
formState: { errors },
} = useForm({
defaultValues: {
email: '',
password: '',
},
})
return (
<VerticalForm
title="ํ์๊ฐ์
"
submitLabel="๊ฐ์
ํ๊ธฐ"
onSubmit={handleSubmit((data) => {
alert(JSON.stringify(data))
})}
after={
<Button as={Link} to="/login" className="text-center">
๋ก๊ทธ์ธ์ผ๋ก ์ด๋
</Button>
}
>
<>
<label className="flex flex-col gap-2">
<span className="text-xl">์ด๋ฉ์ผ</span>
<input
type="email"
className="input input-bordered"
{...register('email', {
required: '์ด๋ฉ์ผ์ ์
๋ ฅํด์ฃผ์ธ์!',
})}
/>
</label>
{errors.email && <li role="alert">{errors.email.message}</li>}
<label className="flex flex-col gap-2">
<span className="text-xl">๋น๋ฐ๋ฒํธ</span>
<input
type="password"
className="input input-bordered"
{...register('password', {
required: '๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์!',
})}
/>
</label>
{errors.password && <li role="alert">{errors.password.message}</li>}
</>
</VerticalForm>
)
}
// react jsx์ ๋ด์ฅ๋์ด ์๋... ์ฆ ์๋ html element์๋ ์๋ ํ์
๋ค์... ๋ฌธ์์ด๋ก ์ธ ์ ์๋ค! "a" "button" "input"
export default Register
์์ ์ฝ๋ ์์ ์๋ title
,submitLabel
๊ณผ after
์์ ๋ค์ด๊ฐ๋ ๋ฌธ์์ด์
Form
์์ ์จ์ฃผ๋๋๋ก ํ์ด์ง๋ง๋ค ๋ณด์ด๋ ๋ด์ฉ์ด ๋ฌ๋ผ์ง๋ค.