์๋ ํ์ธ์ Foma ์ ๋๋ค!
์ค๋์ ์ ๋ฒ ์๊ฐ์ ๋ค๋ค๋ List ํ๋ฉด ์ ์ด์ด์ ํน์ ์ปดํฌ๋ํธ๋ฅผ ํด๋ฆญ ํ์ ๋ ๋ค์ ํ๋ฉด์ผ๋ก ์ด๋ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~
์ธ์ด๋ TypeScript, ํ๊ฒฝ์ Expo๋ก ์งํ ํ๊ฒ ์ต๋๋ค!
Person List
Person ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด ์ค๋๋ค.
(๋ฆฌ์คํธ ํ๋ฉด์ ์ฌ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์!)
Pressable ์ปดํฌ๋ํธ๋ฅผ ๋๋ ์ ๋ PersonDetatil ํ๋ฉด์ผ๋ก ์ด๋ํ๊ฒ ๋ง๋ค์ด ์ค๋๋ค.
(Navigation์ ๋ํ ๊ฒ์ ์ฌ๊ธฐ๋ฅผ ์ฌ๊ธฐ ์ฐธ๊ณ ํด ์ฃผ์ธ์)
๊ทธ๋ฆฌ๊ณ ํจ๊ผ ๋ณด๋ผ ๋ฐ์ดํฐ๋ฅผ { ์ด๋ฆ1: ๋ณด๋ผ ๋ฐ์ดํฐ1, ์ด๋ฆ2: ๋ณด๋ผ ๋ฐ์ดํฐ2...} ์ ๊ฐ์ ํ์์ผ๋ก ์์ฑํด ์ค๋๋ค.
PersonListScreen.tsx
export default function PersonListScreen({
navigation,
}: NativeStackHeaderProps) {
useEffect(() => {
console.log("Rendering Home Screen");
}, []);
return (
<View style={styles.container}>
<FlatList
data={data as Array<Person>}
renderItem={({ item }: { item: Person }) => {
return (
<Pressable
onPress={() =>
navigation.navigate("PersonDetail", {
name: item.name,
age: item.age,
gender: item.gender,
})
}
>
<PersonCell item={item} />
</Pressable>
);
}}
keyExtractor={(item) => item.name}
/>
</View>
);
}
Person Detail
๊ฐ์ฅ ๋จผ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ฌ(PersonListScreen์์ ๋ณด๋ธ ๋ฐ์ดํฐ๋ค) ๊ฒ๋ค์ type์ผ๋ก ๋ง๋ค์ด ์ค๋๋ค.
PersonDetailScreen.tsx
type DetailParams = {
route: {
params: {
name: string;
age: string;
gender: string;
};
};
};
๊ทธ ๋ค์ ์์์ ๋ช ์ํด ๋์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํด Text์ ๋ํ๋ด ์ค๋๋ค.
type Navigation = NativeStackHeaderProps & DetailParams;
export default function PersonDetailScreen({ route }: Navigation) {
return (
<View style={styles.container}>
<Text style={styles.header}>Name: {route.params.name}</Text>
<Text style={styles.header}>Age: {route.params.age}</Text>
<Text style={styles.header}>Gender: {route.params.gender}</Text>
</View>
);
}
์คํ ํ๋ฉด
Person List ํ๋ฉด์์ ๋๋ฅธ ์ปดํฌ๋ํธ ๋ฐ์ดํฐ ๊ฐ์ด Person Detail ํ๋ฉด์ผ๋ก ์ด๋ํ์ฌ ๋ณด์ฌ์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋๊ธ