Closed silverttthin closed 1 year ago
๊ธฐ์กด์ ๊ณต๋ถํ์๋ React Route ๊ฐ V6์ผ๋ก ์ฌ๋ผ๊ฐ๋ฉด์ ์ฌ์ฉ๋ฒ์ด ์กฐ๊ธ ๋ฐ๋์์ต๋๋ค. ๊ณต์๋ฌธ์ ํํ ๋ฆฌ์ผ ๋ณด์๊ณ ๊ฐ์ ์ตํ๋ณด์๋ฉด ์ข์๊ฑฐ ๊ฐ์ต๋๋ค. ๊ฐ ํ์ด์ง๋ง๋ค ์ฌ์ฉํ Router ์ค์ ์ ์ ๊ฐ ํด๋๊ฒ ์ต๋๋ค.
์๊ฒ ์ต๋๋ค! ์ผ๋จ #23 ์๋ฃํ์ค๋๊น์ง๋ ๋ผ์ฐํฐ ๋ค์ ๊ณต์๋ฌธ์๋ก ์ง์ด๋ณด๋ฉด์ ์งํํ๊ฒ ์ต๋๋ค.
๊ณต๋ถ ๋ด์ฉ ๊ณต์ ํฉ๋๋ค!
const commonRoutes = [
{ path: "/", element: <LandingPage /> },
{ path: "/popular", element: <PopularPage /> },
];
const element = useRoutes([
...protectedRoutes,
...publicRoutes,
...commonRoutes,
]);
return (
<>
<Header />
<div className="flex-1">{element}</div>
<Footer />
</>
);
useRoutes
: Routes(๋ฒ์ 5์ Switch)์ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ์ง๋ง, ํํ๋ฒ๋ง ๊ฐ์ฒด ์์ผ๋ก ๋ฐ๊พผ ๊ฒ. ๊ทธ๋ ๊ฒ ์๊ฐํ๊ณ ๋ณด๋ฉด ๋ค๋ฅผ ๊ฑฐ ์๋ค.path | ํ์ | ์ปดํฌ๋ํธ๋ช | ํ์ผ |
---|---|---|---|
/ | Common | <LandingPage /> |
features/misc/routes/Landing.tsx |
/popular | Common | <PopularPage /> |
features/misc/routes/Popular.tsx |
/user/my | Protected | <MyPage /> |
features/my/routes/MyPage.tsx |
/user/my/routine/:routineId/auth | Protected | <MyRoutineAuthPage /> |
features/my/routes/MyRoutineAuth.tsx |
/user/setting | Protected | <SettingPage /> |
features/my/routes/Setting.tsx |
/user/pointshop | Protected | <PointShopPage /> |
features/my/routes/PointShop.tsx |
/routine/make | Protected | <RoutineMakePage /> |
features/routine/RoutineMake.tsx |
/routine/:routineId | Protected | <RoutineDetailPage /> |
features/routine/RoutineDetail.tsx |
/auth/login | Public | <LoginPage /> |
features/auth/routes/Login.tsx |
/auth/signup | Public | <SignupPage /> |
features/auth/routes/Signup.tsx |
์ ๋ฐ์ ์ผ๋ก ์์ฑ๋ ํ๋ก์ ํธ ๊ตฌ์กฐ๊ฐ ๋ฐฐ์ด ๊ฒ๋ค์ด๋ ๊ณต๋ถํ๊ฒ๋ค์ด๋ ๋ง์ด ๋ฌ๋ผ ์จ์ด ํฑ ๋งํ ์ผ๋จ ์ ๊ฐ ๋ชจ๋ฅด๋ ๊ฒ๋ค์ ๋ช ํํ ํ๊ณ ๊ทธ๊ฒ๋ค์ ๋จผ์ ํด๊ฒฐํ๋ ๋ฐฉํฅ์ ํํ์ต๋๋ค.
์์ฑ ๋ฐฐ๊ฒฝ์ ์ ๋ชจ๋ฅด๋ ํ์ผ ๋ฐ ๊ฒฝ๋ก๋ค์ด ๋ง์ ์ผ๋จ ์ง๊ด์ ์ผ๋ก ๋ถ์ํด๋ณด์๋ค.
assets: ๋ฐ๋ฆฌ๋ฃจํด ๋ก๊ณ ์ฌ์ง
components ํด๋
Element : Button, Header, Footer, Jumbotron, Navitem ์ปดํฌ๋ํธ ์ ์ฅ์
โ ๋ด๊ฐ ๋ง๋ค์ด์ผ ํ Category ์ปดํฌ๋ํธ๋ค๋ ์ฌ๊ธฐ์ ๋ฃ์ด๋์ผ ํ ๋ฏ?
Layout :
features ํด๋
routes ํด๋
.. ๋ฑ๋ฑ ์ด์ธ๋ ๊ธฐ๋ณธ ์ธํ ํ์ผ์ด๋ ์๋ณด๋ค ์ฐจ์ ์์์ธ๋ฏ
๊ฐ๊ธฐ ๋ง๋ค์ด๋ ์์๋ค์ index๋ผ๋ ๋์ผํ ํ์ผ๋ช ์ ํ์ผ๋ค์ด exportํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค๋ฅธ ํ์ผ์์ ํ๋ฒ์ index๋ฅผ ์ํฌํธํด์ ๊ทธ๋ฐ๊ฑด๊ฐ ์ถ์ธกํ๋๋ฐ ์ ๋ชจ๋ฅด๊ฒ ์
์์ํ css๋ง ์ฌ์ฉํ๋ค๊ฐ css framework๋ฅผ ์ฒ์ ์ ํด์ tailwind css ์ฌ์ฉ๋ฒ์ด ๋ฏ์ค๊ธดํ๋ฐ.. ์ผ๋จ ๊ตฌ๊ธ๋ง ํด๋ณด๋ฉด์ ๊ณต๋ถํด๋ณด๋ฉด์ ์ํ์ฐฉ์ค ๊ฒช์ด๋ด์ผํ ๋ฏ?
React Route ์ฒ์ ๊ณต๋ถํ์ ๋ <Route path="signup/more"element = {<signupmore / >} /> ์ด๋ ๊ฒ ํด๋๊ณ signupmore ์ปดํฌ๋ํธ์์ ํด๋น ํ์ด์ง๋ฅผ ๊ทธ๋ฆฌ๋ ์์ผ๋ก ํ์ต๋๋ค.
โ ๊ทธ๋์ ์ด๋ฒ์๋ ์ผ๋จ auth ๋๋ ํ ๋ฆฌ ์๋์ ์๋ index.tsx์์ <Route path="signup/more" element = {<signupMore />}/>๋ก ์ผ๋จ ๋ง๋ค์ด๋๊ณ ํด๋น path๋ก ๋ค์ด๊ฐ์ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ๋ณ๊ฒฝ์ฌํญ๋ค ๋ณด๋ฉด์ ์์ ํ๋ ค ํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์๊ฐํด๋ ์ปดํฌ๋ํธ๊ฐ ๋ก๋ ๋์ง ์๊ณ no routes matched location ์ค๋ฅ๋ก ํ์ธ๋๋๋ฐ ๊ตฌ๊ธ๋งํด์ ๋ด๋ ์ ํฌ ํ๋ก์ ํธ์ ๋ง๊ฒ ํด๊ฒฐํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ์งํ์ด ์๋๋ css ์ค์ต๋ ๋ชปํด๋ณด๊ณ ๋งก์ ๋ถ๋์ด ์์ ์ ์ธํ ๋ถํฐ ๋งํ๋ฒ๋ฆฌ๋..ใ
์ฌ์ค์ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ํฌ๊ดํ๋ ๋ฉ์ธ ๋ฌธ์ ๊ฐ 3๋ฒ. ๋ณ๊ฒฝ์ฌํญ๋ค์ ํ๋ฉด์ผ๋ก ๋ณด๋ฉด์ ๊ณต๋ถ์ ๋์์ ๊ตฌํํด ์งํ๋๋ฅผ ์กฐ๊ธ์ฉ ๋๋ฆฌ๊ฒ๋ผ๋ ๋๋ ค๋๊ฐ๊ณ ์ถ์๋ฐ ์์๋ ๋ชปํ๊ณ ์์ต๋๋ค.
๊ฐ์ธ ๊ณต๋ถํ๋ ํ๋ก์ ํธ์์ ๊ท๋ชจ๊ฐ ํฐ ํ์ ํ์ ์ผ๋ก ๋์ด๊ฐ๋ ์์ค์ด ๋๋ฌด ํฌ๊ฒ ๋ฌ๋ผ์ ธ์ ํผ์๋ก๋ ํด๊ฒฐ์ด ์ด๋ ค์ ์ด์๋ก ๋์์ ์์ฒญํฉ๋๋ค.