์๋ ํ์ธ์ Foma ์ ๋๋ค!
์ ๋ฒ ์๊ฐ์ Form์ ๋ง๋ค์ด ํด๋น Screen์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํด ๋ณด์๋๋ฐ์.
(ํด๋น ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์งํ๋๋ ์์ง ์๋ณด์ ๋ถ๋ค์ ์ฌ๊ธฐ ์์ ๋ณด๊ณ ์ ์ฃผ์ธ์!)
๊ฐ๋จํ๊ณ ๋ ํจ์จ์ ์ผ๋ก Form์ ๋ง๋ค ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ด ์ฌ์ฉํด ๋ณด๊ณ ๊ธ์ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค!
๋ฐ๋ก ์์ํ ๊ฒ์~!
์ธ์ด๋ TypeScript, ํ๊ฒฝ์ Expo๋ก ์งํ ํ๊ฒ ์ต๋๋ค!
React Hook Form์ด๋?
React Hook Form์ Form์ ์ฌ์ฉ ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
๊ณต์ ํํ์ด์ง์์ ํ ์ค๋ก "์ ์ฉํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ๊ณ ์ฑ๋ฅ ํผ ๊ฒ์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ" ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฅ์ ์ ์๋์ ๊ฐ์ต๋๋ค.
๋ ์์ธํ ๋ด์ฉ์ ์๊ณ ์ถ๋ค๋ฉด ๊ณต์ ํํ์ด์ง๋ก ๊ฐ์ ํ์ธํด ๋ณด์๊ธธ ๋ฐ๋๋๋ค!
Install
React Hook Form์ ์ค์นํด ์ค๋๋ค.
npm install react-hook-form
AddPersonForm
๋จผ์ useForm๊ณผ Controller๋ฅผ import ํด์ค๋๋ค.
import { useForm, Controller } from "react-hook-form";
๋จผ์ control๊ณผ handleSubmit ์ผ๋ก useForm์ ๋ง๋ค์ด ์ค๋๋ค.
control์ form ์ํ๋ฅผ ์ ์ฅํ๋ ๋ณ์์ด๊ณ handleSubmit์ form์ ์ ์ถํ ๋ onSubmit ํ๋กํผํฐ์ ํจ๊ป ์ฌ์ฉ๋ ๊ฒ์ ๋๋ค.
export function AddPersonForm({ onSubmit }: PersonFormProps) {
const { control, handleSubmit } = useForm();
...
์๋์ ๊ฐ์ด Controller ์ปดํฌ๋ํธ๋ฅผ ํ์ฉํ๋๋ฐ์.
control: ์์์ ๋ง๋ control์ ๋ฃ์ด์ค๋๋ค.
rules: ํผ์ด ๋ฐ๋์ ์ ๋ ฅ๋์ด์ผ ํ๋์ง๋ฅผ ์ ์ด์ค๋๋ค.
name: ํผ์ ์ด๋ฆ์ ์ ํด์ค๋๋ค.
defaultValue: ํผ์ด ์ ๋ ฅ๋์ง ์์์ ๋ ๊ธฐ๋ณธ๊ฐ์ ๋ฃ์ด์ค๋๋ค.
render: onChange์ value ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ TextInput์ onChangeText์ value์ ๋ฐ์ธ๋ฉ ํด์ฃผ์ด ๊ฐ์ด ๋ฐ๋๋ฉด ์ฆ์ TextInput์ ์ ๋ ฅ๊ฐ์ด ๋ฐ๋๋๋ก ํฉ๋๋ค.
(์ด ์ธ์๋ errors,maxLength ๋ฑ ๋ค์ํ validation์ ์ถ๊ฐํ ์ ์์ต๋๋ค.)
return (
<View>
<Controller
control={control}
rules={{ required: true }}
name="name"
defaultValue={""}
render={({ field: { onChange, value } }) => (
<TextInput
onChangeText={onChange}
value={value}
style={styles.input}
placeholder="Enter your name"
/>
)}
/>
Button ์ปดํฌ๋ํธ์ onPress๊ฐ ์คํ๋ ๋ ์์์ ๋ง๋ handleSubmit์ onSubmit ํ๋กํผํฐ๋ก data๋ฅผ ์ ๋ฌํฉ๋๋ค.
<Button
onPress={handleSubmit((data) => onSubmit(data as PersonForm))}
title="Submit"
></Button>
์คํ ํ๋ฉด
ํผ์ ๊ฐ์ ๋ฃ๊ณ Submit ๋ฒํผ์ ๋๋ฅด๋ฉด ํด๋น ํผ์ ์ ๋ ฅ๋ ๊ฐ๋ค์ด alert๋ก ๋ํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋๊ธ