React Native์์ ๋ผ์ฐํ
์ ๊ฝค๋ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด์๋ค.
react-navigation
์ ์ง์ ์ค์ ํ๊ณ , stack/screen ๋ฑ์ ์ผ์ผ์ด ๋ฑ๋กํด์ผ ํ๊ธฐ ๋๋ฌธ.
ํ์ง๋ง! Expo์์ Next.js์ ํ์ผ ๊ธฐ๋ฐ ๋ผ์ฐํ
์ ๊ฐ์ ธ์จ Expo Router
๋ฅผ ํตํด,
๋ผ์ฐํ
๊ตฌ์กฐ๊ฐ ํจ์ฌ ๋จ์ํ๊ณ , ์ง๊ด์ ์ผ๋ก ๋ฐ๋์๋ค! ๐
Expo Router๋ app/
ํด๋์ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ ๋ผ์ฐํ
์ ์ค์ ํ๋ค.
๐ app/
โฃ ๐ index.tsx โ '/'
โฃ ๐ about.tsx โ '/about'
โฃ ๐ profile/
โ โ ๐ [id].tsx โ '/profile/:id'
โ ๐ settings/
โฃ index.tsx โ '/settings'
โ notifications.tsx โ '/settings/notifications'
ํ์ผ/ํด๋ ๊ตฌ์กฐ = URL ๊ฒฝ๋ก
๐ ์ง์ง๋ก Next.js ๋๋์ด ๊ทธ๋๋ก!
npx create-expo-app my-app -t with-router
์ค์น ํ์๋ ๋ฐ๋ก app/
ํด๋๋ก ๋ผ์ฐํ
์ ์์ํ ์ ์๋ค.
// app/index.tsx
import { Link } from 'expo-router';
export default function Home() {
return (
<Link href="/about">About ํ์ด์ง๋ก ์ด๋</Link>
);
}
Link
์ปดํฌ๋ํธ๋ก ๋ค๋น๊ฒ์ด์ ๋ ์ฌํํ๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅ!
// app/_layout.tsx
import { Stack } from 'expo-router';
export default function Layout() {
return <Stack />;
}
_layout.tsx
๋ฅผ ํตํด ๊ณตํต Stack, Tab ๋ฑ์ ์ ์ํ๊ณ app/
๋ด๋ถ์ ํ์ผ ๊ตฌ์กฐ๋ก ํ๋ฉด์ด ์๋ ์ฐ๊ฒฐ๋๋ค.๊ธฐ๋ฅ | ์ค๋ช |
---|---|
๋์ ๋ผ์ฐํ | [id].tsx , [...slug].tsx ๋ฑ Next.js์ ์ ์ฌ |
์ค์ฒฉ ๋ค๋น๊ฒ์ด์ | Tab, Stack, Drawer ์ค์ฒฉ ๊ฐ๋ฅ |
Layout ๊ทธ๋ฃน | (group)/screen.tsx ์ผ๋ก ๋ถ๋ฆฌ ๊ฐ๋ฅ |
๋ฆฌ๋๋ ์ | redirect() ํจ์ ์ฌ์ฉ |
๋ค์ดํฐ๋ธ ๋ชจ๋ฌ | modal.tsx ๋ก ์ค์ ํ๋ฉด ์๋ ๋ชจ๋ฌ ์ฒ๋ฆฌ |
์ฒ์์ "๋ผ์ฐํฐ๊ฐ ๋ฐ๋์ด์ ๋ญ๊ฐ ์ข์ง?" ์ถ์๋๋ฐ,
๋ง์ ์จ๋ณด๋ฉด ๋ผ์ฐํ
๊ตฌ์กฐ๊ฐ ๋๋ฌด ๊น๋ํ๊ณ ์ ์ง๋ณด์๊ฐ ํธํจ.
ํ๋ฉด์ด ๋ง์์ง์๋ก ์ด ๊ตฌ์กฐ๊ฐ ์ง๊ฐ๋ฅผ ๋ฐํํจ์ ๋๋๋ค.
ํ์ผ ๊ธฐ๋ฐ ๋ผ์ฐํ
์ ์ต์ํ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ผ๋ฉด
React Native ์ง์
์ฅ๋ฒฝ์ด ํฌ๊ฒ ๋ฎ์์ง ์ ์๋ ๊ตฌ์กฐ๋ผ ๋๊ผ์! ๐
๐ฅ "Expo Router๋ ๋จ์ํ ๋ผ์ฐํ ๋๊ตฌ๋ฅผ ๋์ด์, React Native ์ฑ ๊ตฌ์กฐ ์์ฒด๋ฅผ ํ์ ํ๋ค!"