[RN] ๋ฐ์ดํฐ ํจ๊ณผ์ ์ผ๋ก ๋๊ธฐ๊ณ ๋ฐ์์ค๊ธฐ - ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ or param์ ์ก(feat. props์ param์ฉ์ด ํผ๋)
์ ๋ชฉ์๋ ์ ์๋ค ์ํผ
์ด ๊ธ์์๋
props์ param์ ์ฐจ์ด๋ฅผ ํผ๋ํด์ ์๊ธด ๋ฌธ์ ์
๋, param์ผ๋ก ๋ฐ์ดํฐ ๋๊ธฐ๋ ๊ฒฝ์ฐ์ ์ํ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
๋ญ ๊ทธ๋ฐ ๊ฒ๋ค์ ์ฐจ์ด๋ฅผ ๋ค๋ฃฐ ๊ฒ์ด๋ค.
๋ฌผ๋ก ์์ฃผ ์ด๋ณด์ ์ ์ธ ์ค์๋ผ๊ณ ์๊ฐ์ด ๋ค์ง๋ง
์ด๋ณด์ ๋ง๋ค.ใ
๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ์ง๊ธ ์ด ๊ธ์์
๋ง๋ค๊ณ ์ ์ด๋์ ๊ธ์ด
๋ ๋์ค์ ๋ณด๋ฉด ์ ๋ชป ์ ์ด๋ ์ ๋ณด๊ฐ ์์ ๊น ๋๋ ต์ง๋ง ใ
ใ
๊ทธ๋๋ ์ผ๋จ ๊ธฐ๋กํด๋๋ค.


์์ ์ฌ์ง์ ์ต๊ทผ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ
props drilling ๋ผ๋ ๋ฌธ์ ๊ทธ๋ฆฌ๊ณ ์ํ๊ด๋ฆฌ ๊ด๋ จํด์ ๊ธ์ ์ธ ๋์
๋ด๊ฐ ์ด๋ค ๋ถ๋ถ์์ props drilling๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋์ง์ ๋ํด
๊ธฐ์ฌํ ๋ถ๋ถ์ด๋ค.
๊ทธ๋ฐ๋ฐ ๋ค์ ์๊ฐํด๋ณด๋,
์ ๊ฑด props ์ ์ก์ด ์๋, param์ ์ก์ ์ฝ๋์ด๋ค.
props์ params
๋ ๋์ด ๋น์ทํ ๋ฉ์ปค๋์ฆ์ผ๋ก
์๋ ๋๋ ์ค ์์๋ค.
๋ ๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋์ ๋ถํ์ํ ํ๋ฉด์๋ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋๊ฐ์ด
๋๊ฒจ์ฃผ์ด์ผ ํ๋ ์ค ์์๊ณ ,
์์-ํ์ ๊ด๊ณ๊ฐ ์๋ ์ค ์์๋ค.
๊ทธ๋์ params์ ์ก์์๋ drilling๋ฌธ์ ๊ฐ ๋ฐ์๋๋ ์ค ์์๊ณ
ํ์ง๋ง ๋ ๊ฐ์ ์ฉ์ด์๋ ํ์คํ ์ฐจ์ด๊ฐ ์์๊ณ ,
๋ด๊ฐ ์๋ชป ์๊ณ ์์๋ ๋ถ๋ถ์ด ์์๋ค.
props์ ์ก์ด๋?
: ์์ ๊ตฌ์ฑ ์์์์ ํ์ ๊ตฌ์ฑ ์์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
// ParentComponent.js
import React from 'react';
import ChildComponent from './ChildComponent';
const ParentComponent = () => {
const dataToPass = 'Hello from parent';
return <ChildComponent propData={dataToPass} />;
};
export default ParentComponent;
// ChildComponent.js
import React from 'react';
import { Text } from 'react-native';
const ChildComponent = ({ propData }) => {
return <Text>{propData}</Text>;
};
export default ChildComponent;
๋งค๊ฐ๋ณ์ ์ ์ก(React Navigation)
: ์๋ก ๋ค๋ฅธ ํ๋ฉด์ด๋ ๊ตฌ์ฑ ์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์๋ค.
: React Navigation์ ์ฌ์ฉํ์ฌ ํ๋ฉด ๊ฐ์ ํ์ํ ๋ ํ ํ๋ฉด์์ ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์๋ค.
: ๋งค๊ฐ๋ณ์๋ ํ์ ์ปจํ
์คํธ์๋ง ์ ์ฉ๋๋ฉฐ ์์-ํ์ ๊ด๊ณ๋ก ์ ํ๋์ง ์๋๋ค.
๊ตฌ์ฑ ์์ ๊ณ์ธต ๊ตฌ์กฐ์์ ์ง์ ์ ์ธ ์์-ํ์ ๊ด๊ณ๊ฐ ์์ ์ ์๋ ํ๋ฉด ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
// ScreenA.js
import React from 'react';
import { Button } from 'react-native';
const ScreenA = ({ navigation }) => {
const dataToPass = 'Hello from Screen A';
return (
<Button
title="Go to Screen B"
onPress={() => {
navigation.navigate('ScreenB', { paramData: dataToPass });
}}
/>
);
};
export default ScreenA;
// ScreenB.js
import React from 'react';
import { Text } from 'react-native';
const ScreenB = ({ route }) => {
const paramData = route.params.paramData;
return <Text>{paramData}</Text>;
};
export default ScreenB;
์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์
React Navigation์์๋ ๋งค๊ฐ๋ณ์(params)๋ฅผ ๋ณด๋ผ ๋
์ค๊ฐ ํ๋ฉด์ ๊ฑฐ์น์ง ์๊ณ ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ์ง์ ์ ๋ฌํ ์ ์๋ ๋งค์ปค๋์ฆ์ด๋ผ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ๋ฌธ๋ ๋ ์๊ฐ..
๊ทธ๋ผ ์ค๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๊ฑฐ์น ํ์ ์๋ param์ผ๋ก ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ค ์ ๋ฌํ๋ฉด ๋๋ ๊ฒ ์๋๊ฐ?
์ํ๊ด๋ฆฌ๋ ๊ทธ๋ผ ์ ํ์ํ์ง?
๋ค์ ํ๋ฒ ๋งํ์ง๋ง
์ ๋ง ์ด๋ณด์ ์ ์ธ ์๊ฐ์ผ์ง ๋ชฐ๋ผ๋
์ด๋ณด์ ๋ง๋ค ใ
ใ
๊ทธ๋์ ๋ ํ ๋ฒ param์ ์ก์ด ์๋, ์ํ๊ด๋ฆฌ๊ฐ ํ์ํ ์ด์ ์ ๋ํด ์ฐพ์๋ค.
1. ์ ์ญ ์ํ : ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ดํ๋ฆฌ์ผ์ด์
์ ์ญ์์
์ก์ธ์ค ํ๊ณ ์์ ํ ์ ์๋ ์ ์ญ ์ ํ๋ฆฌ์ผ์ด์
์ํ๋ฅผ ์ ์งํ ์ ์๋ค.
params๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค๋น๊ฒ์ด์
์คํ ๋ด์์ ๋ ๊ฐ์ ํน์ ํ๋ฉด ๊ฐ์ ํต์ ์ ์ ํ๋๋ค.
2. ๋ณต์กํ ์ํ : ๋ง์ ๋ฐ์ดํฐ ๋๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ,
params๋ง ์ฌ์ฉํ์ฌ ๊ทธ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ฉด ์ง๋์น๊ฒ ๋ณต์กํ ์ฝ๋๊ฐ ๋ ์ ์์ผ๋ฉฐ
์ํ ์ ํ์ ์ ์ง ๋ฐ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์๋ค.
3. ๋ฐ์์ฑ : ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์์ฑ์ ๊ด๋ฆฌํ๊ณ
์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋ ๊ตฌ์ฑ ์์๋ฅผ ์๋์ผ๋ก ์
๋ฐ์ดํธํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค.
Params๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฌํ ๋ฐ์์ฑ ์์ค์ ์ ๊ณตํ์ง ์์ผ๋ฉฐ
params์ ๋ณ๊ฒฝ์ ๋์ํ์ฌ ์
๋ฐ์ดํธ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ ์ ์๋ค.
4. ๊ฒฐํฉ์ฑ ๋ถ๋ฆฌ : ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฐ์ดํฐ์ ์ํ ๊ด๋ฆฌ๋ฅผ
UI ๊ตฌ์ฑ ์์์์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ๊นจ๋ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์ ๋ํ๋ค.
5. ๋ฏธ๋ค์จ์ด ๋ฐ ๊ฐ์ ๊ธฐ๋ฅ: ๋ง์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋
๋น๋๊ธฐ ์์
, ๋ก๊น
, ๋๋ฒ๊น
๋๊ตฌ ๋ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ
์ ํ๋ฆฌ์ผ์ด์
์ ํฅ์์ํฌ ์ ์๋ ๋ฏธ๋ค์จ์ด์ ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํ๋ค.
์์ฝํ๋ฉด React Navigation์ ํตํ params๋ฅผ ์ฌ์ฉํ์ฌ
๋ค๋น๊ฒ์ด์
๊ด๋ จ ๋ฐ์ดํฐ ๋ฐ ๊ฐ๋จํ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ ์๋ํ ์ ์์ง๋ง,
params๋ง์ผ๋ก ๋ณต์กํ ์ ์ญ ์ํ ๊ด๋ฆฌ ํ์์ฑ์ ์ถฉ์กฑํ์ง ๋ชปํ ์ ์๋ค.
์ด๊ฒ ๋ํ props์ ์ก ๋์ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ์ ๋น์ทํ ์ด์ ์ธ ๋ฏ ํ๋ค.
์ํ๊ด๋ฆฌ์ Param์ ์ฌ์ฉ์ ์ฐจ์ด์ ๋ํ ๊ฒฐ๋ก ๋ฐ ์์
์ฆ, ์ํ๊ด๋ฆฌ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ
์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฌ ๋ถ๋ถ ๊ฐ์ ๊ณต์ ํ๊ณ ์
๋ฐ์ดํธ ํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด, ์ฌ์ฉ์๊ฐ ๋ฐ์ ํ
๋ง์ ์ด๋์ด ํ
๋ง ๊ฐ์ ์ ํํ ์ ์๊ฒ ํ๋ ค๊ณ ํ ๋ !
// ThemeContext.js
import React, { createContext, useState, useContext } from 'react';
const ThemeContext = createContext();
export const useTheme = () => {
return useContext(ThemeContext);
};
export const ThemeProvider = ({ children }) => {
const [theme, setTheme] = useState('light');
const toggleTheme = () => {
setTheme((currentTheme) => (currentTheme === 'light' ? 'dark' : 'light'));
};
return (
<ThemeContext.Provider value={{ theme, toggleTheme }}>
{children}
</ThemeContext.Provider>
);
};
์ด ์์ ๋ React์ context api๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ญ ํ
๋ง ์ปจํ
์คํธ๋ฅผ ๋ง๋ค๊ณ ,
'ThemeProvider'๋ด์์ ํ
๋ง ์ํ๊ด๋ฆฌ๋ฅผ ํ๋ค.
์ฑ ๋ด์ ์ปดํฌ๋ํธ๋ useTheme ํ
์ ์ฌ์ฉํ์ฌ ํ
๋ง ์ํ์ ์ก์ธ์ค ํ๊ณ
์
๋ฐ์ดํธ ํ ์ ์๋ค. ์ด๊ฒ์ด ์ ํ์ ์ธ ์ํ๊ด๋ฆฌ์ ์์ด๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์
์ฃผ๋ก ๋ค๋น๊ฒ์ด์
๊ณผ ํ๋ฉด ๊ฐ ํต์ ๊ณผ ๊ด๋ จ์ด ์๋ค.
ํน์ ๋ฐ์ดํฐ๋ฅผ ํ ํ๋ฉด์์ ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ์ ์กํด์ผ ํ๋ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก ์์ ํ๋ฉด์ ๊ตฌ์ฑ ๋๋
์ฌ์ฉ์ ์ ์ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์ฉํ๋ค.
์๋ฅผ ๋ค๋ฉด, ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ํ๋กํ ํ๋ฉด์ผ๋ก ์ ๋ฌํ ๋์ด๋ค.
// ScreenA.js
import React from 'react';
import { Button } from 'react-native';
const ScreenA = ({ navigation }) => {
const userData = {
name: 'John Doe',
email: 'john@example.com',
};
return (
<Button
title="ํ๋กํ ๋ณด๊ธฐ"
onPress={() => {
navigation.navigate('Profile', { user: userData });
}}
/>
);
};
// ProfileScreen.js
import React from 'react';
import { Text } from 'react-native';
const ProfileScreen = ({ route }) => {
const user = route.params.user;
return (
<Text>
์ด๋ฆ: {user.name}
{'\n'}
์ด๋ฉ์ผ: {user.email}
</Text>
);
};
์ด ์์ ๋ ScreenA์์ ProfileScreen์ผ๋ก ์ด๋ํ ๋
userData๊ฐ์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๋ค.
ProfieScreen์ route.params๊ฐ์ฒด์์ ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๋ค.
์ด๊ฒ์ ํน์ ํ๋ฉด์ ๋์ ๋๋ ์ฝํ
์ธ ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์์ด๋ค.
๊ทธ๋ผ ์ด๋จ ๋ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ,
์ด๋จ ๋ param์ ์ก์ ์ฌ์ฉํด์ผ ํ๋๊ฐ? ์ด ๋ถ๋ถ์ ๋ํ ๋ช
ํํ ํ์ ์ด ๋ค์ง ์๋๋ค.
๋จ์ํ param์ ์ก์ด ํ์ํ ๋๋ ๋ถ๋ช
์กด์ฌ ํ ํ
๋ฐ..
ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ ๊ฒฝ์ฐ, ์ํ๊ด๋ฆฌ๋ฅผ ๊ณ ๋ คํด์ผ ํ ๊ฒฝ์ฐ
- ํ๋ผ๋ฏธํฐ ์ ์ก ์ฌ์ฉ ์
: ๋ค๋น๊ฒ์ด์
์ค์ ํ๋ฉด ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํด์ผ ํ๋ ๊ฒฝ์ฐ.
: ์์ ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์ ๋์์ ๊ตฌ์ฑํ๊ฑฐ๋ ์ฌ์ฉ์ ์ ์ํ๋ ค๋ ๊ฒฝ์ฐ.
: ์ ๋ฌ๋๋ ๋ฐ์ดํฐ๊ฐ ์ผ์์ ์ด๋ฉฐ ๋ค๋น๊ฒ์ด์
์์
์ ํน์ ํ ๊ฒฝ์ฐ.
- ์ํ๊ด๋ฆฌ๋ฅผ ๊ณ ๋ คํ๋ ๊ฒฝ์ฐ
: ์ฑ์ ์ ์ญ ์ ํ๋ฆฌ์ผ์ด์
์ํ๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ(์ฑ์ ์๋ช
์ฃผ๊ธฐ ๋์ ์ง์๋จ).
; ๋ณต์กํ ๋ฐ์ดํฐ ์ํธ ์์ฉ ๋ฐ ๋ฐ์ดํฐ ๊ณต์ ์๊ตฌ ์ฌํญ์ด ๋ค์ํ ์ฑ ๋ถ๋ถ์์ ํ์ํ ๊ฒฝ์ฐ.
: ๋ฐ์ดํฐ๊ฐ ์ฑ ์ธ์
๊ฐ์ ์ง์๋์ด์ผ ํ๋ ๊ฒฝ์ฐ(์: ์ฌ์ฉ์ ์ธ์ฆ ์ํ, ์ฌ์ฉ์ ํ๊ฒฝ ์ค์ , ์บ์๋ ๋ฐ์ดํฐ).
: ๋ฐ์ดํฐ ์บ์ฑ, ์ง์ฐ ๋ก๋ฉ ๋๋ ๋ฐ์ดํฐ ๋ณํ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ.
๋ง์ ๊ฒฝ์ฐ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์กฐํฉ์ด ํจ๊ณผ์ ์ผ ์ ์๋ค.
์ฝ๋๋ฅผ ์์ฑํ ๋
์ธ์ ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ๊ตฌํํด์ผ ํจ๊ณผ์ ์ผ์ง์ ๋ํด
ํ๋จ์ ์ ํด์ผ ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
์ํ๊ด๋ฆฌ๊ฐ ํ์ํ ์ฝ๋์ธ์ง
๋จ์ํ ๋ฐ์ดํฐ ๋๊น์ด ํ์ํ ๊ฒ์ธ์ง..
์ดํดํ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ์์๋
๊ณ์ํด์ ๋ชฐ๋๋ ๋ถ๋ถ์ด ์๊ฒจ๋๋ ๊ฒ์ ๋ณด์
๊ธฐ์ด ๋ผ๋์ ๋ํด
์ข ๋ ํํํ๊ฒ ๋ค์ง ํ์์ฑ์ ๋๊ผ๋ค.