์๋ ํ์ธ์ Foma ์ ๋๋ค!
React Native์์ Form์ ๋ง๋ค์ด ํด๋น Screen์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~!
์ธ์ด๋ TypeScript, ํ๊ฒฝ์ Expo๋ก ์งํ ํ๊ฒ ์ต๋๋ค!
AddPersonForm.tsx
๋จผ์ ์ฌ๋์ ์ถ๊ฐํ๋ Form์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
PersonFormType
Form์ ๋ค์ด๊ฐ ํ๋กํผํฐ๋ค์ ์ ์ํด ์ค๋๋ค.
export type PersonForm = {
name: string;
age: string;
gender: string;
};
PersonProps
Form์ ํ๋กํผํฐ์ type์ ์ ์ํด ์ค๋๋ค.
์ ์ถ ํ์์ ๋ PersonForm์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ํจ์๋ฅผ ๋ง๋ค์ด ์ฃผ๊ฒ ์ต๋๋ค.
type PersonFormProps = {
onSubmit: (form: PersonForm) => void;
};
AddPersonForm
AddPersonForm์ ์์์ ์ ์ํ PersonFormProps๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์์ฑํด ์ค๋๋ค.
export function AddPersonForm({ onSubmit }: PersonFormProps) { ...
formState
form์ ์ํ๋ฅผ ์ ์ฅํ useState๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
const [form, setForm] = useState({
name: "",
age: "",
gender: "",
});
View
TextInput์ ์ด์ฉํ์ฌ ๊ฐ ํ๋กํผํฐ์ ๋ง๋ Input ์ฐฝ์ ๋ง๋ค์ด ์ฃผ๊ณ ,
์๋์ ์ ์ถ์ ํ ๋ฒํผ์ธ Submit์ ๊ตฌํํด ์ฃผ๊ณ , ํด๋น ๋ฒํผ์ ๋๋ ์ ๋ form ์ ๋ณด๋ฅผ ๋ด์ onSubmit์ด ๋๋๋ก ํฉ๋๋ค.
return (
<View>
<TextInput
placeholder="name"
style={styles.input}
onChangeText={onChangeText("name")}
value={form.name}
/>
<TextInput
placeholder="age"
style={styles.input}
onChangeText={onChangeText("age")}
value={form.age}
/>
<TextInput
placeholder="gender"
style={styles.input}
onChangeText={onChangeText("gender")}
value={form.gender}
/>
<Button onPress={() => onSubmit(form)} title="Submit"></Button>
</View>
);
onChangeText
ํ ์คํธ๊ฐ ์์ ๋์์ ๋ ์ด๋ค ์ธํ์ฐฝ์ด ์์ ๋ ๊ฑด์ง prop์ผ๋ก ์์๋ธ ๋ค form์ ํด๋น ํ๋กํผํฐ์ value๊ฐ์ ์ค์ ํด ์ค๋๋ค.
const onChangeText = (prop: string) => (value: string) => {
setForm({
...form,
[prop]: value,
});
};
AddPersonScreen.tsx
์ ์ถํ์ ๋ form ์ ๋ณด๋ฅผ alert๋ก ๋์ธ handleSumit ํจ์๋ฅผ ์์ฑํด ์ค๋๋ค.
View์ ์์์ ๋ง๋ AddPersonForm ๋ฃ์ด์ฃผ๊ณ onSubmit์ด ๋์์ ๋ handleSubmit์ด ์คํ๋๋๋ก ํฉ๋๋ค.
export default function AddPersonScreen() {
const handleSubmit = (form: PersonForm) => {
alert(`Name: ${form.name} Age: ${form.age} Gender: ${form.gender}`);
};
return (
<View style={styles.container}>
<AddPersonForm onSubmit={handleSubmit}></AddPersonForm>
</View>
);
}
์คํ ํ๋ฉด
ํด๋น ์ธํ์ฐฝ์ ๊ฐ ๊ฐ์ ์ ๋ ฅํ๊ณ Submit ๋ฒํผ์ ๋๋ฅด๋ฉด ์๋์ ๊ฐ์ด alert ์ฐฝ์ ํด๋น form ์ ๋ณด๊ฐ ๋์์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋๊ธ