1. RouterProvider
RouterProvider
React Router ๋ฒ์ 6.4๋ถํฐ ์ง์ํ๋, ๋ผ์ฐํฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ์ฐ๋ ๋ฐฉ๋ฒ
๋ชจ๋ ๋ฐ์ดํฐ ๋ผ์ฐํฐ ๊ฐ์ฒด๋ ์ด ๊ตฌ์ฑ ์์๋ก ์ ๋ฌ๋์ด ์ฑ์ ๋ ๋๋งํ๊ณ ๋๋จธ์ง ๋ฐ์ดํฐ API๋ฅผ ํ์ฑํ
โ๏ธ ์กฐ๊ฐ๊ธ
React Router๊ฐ Context API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋ ๊ฒ์ด ๋ฌผ์ฌ ๋๊ปด์ง๋ ํํธ์๋ค. Context API๋ฅผ ์ฌ์ฉํด๋ณธ ์ ์ด ๋ง์ง ์์์ ๊ทธ๋ฐ์ง, '๊ตณ์ด RouterProvider๋ฅผ ์ฌ์ฉํด ๋ผ์ฐํ
์ ๊ตฌํํด์ผ ํ ๊น?'๋ผ๋ ์๋ฌธ์ด ๋ ๋ค. 2๊ฐ์์ ๋ฐฐ์ ๋ ๊ธฐ์กด์ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ฉด ์ด๋ ์๊ฐ ๋ถํธํด์ง๋ ์ผ์ด ์๊ธฐ๊ธฐ ๋๋ฌธ์ผ๊น? ํ์ด์ง๊ฐ ๋ง์ด ๋์ค์ง ์๋ ์์ ํ๋ก์ ํธ๊ฐ์ ๊ฒฝ์ฐ์๋ ๊ทธ๋ฅ ์ด์ ๋ฐฉ์์ ์ฌ์ฉํ์๋๋ฐ, ์ฐ์ต ์ฐจ์์์ RouterProvider๋ ์ฌ์ฉํด ๋ด์ผ๊ฒ ๋ค.
2. createBrowserRouter
createBrowserRouter
React Router ์น ํ๋ก์ ํธ์ ๊ถ์ฅ๋๋ ๋ผ์ฐํฐ
DOM History API๋ฅผ ์ฌ์ฉํ์ฌ URL์ ์
๋ฐ์ดํธํ๊ณ ๊ธฐ๋ก ์คํ์ ๊ด๋ฆฌ
loaders, actions, fetchers ๋ฑ๊ณผ ๊ฐ์ v6.4 ๋ฐ์ดํฐ API๋ฅผ ํ์ฑํ
children ํ๋กํผํฐ์ ์ค์ฒฉ๋ ๊ฒฝ๋ก๊ฐ ์๋ Route ๊ฐ์ฒด์ ๋ฐฐ์ด
createBrowserRouter([
{
path: "/",
element: <Root />,
loader: rootLoader,
children: [
{
path: "events/:id",
element: <Event />,
loader: eventLoader,
},
],
},
]);
3. ์ฌ์ฉ ๋ฐฉ๋ฒ
๐ ์ค์ต ๋งํฌ
๐ App.tsx๊ฐ ํ๋ ์ผ
์ ์ฒด์ ์ธ ๋ ์ด์์ ๊ตฌ์ฑ
๋ผ์ฐํ
์ ๋ณด ๋ณ๋์ ํ์ผ๋ก ๋ถ๋ฆฌ
์ปดํฌ๋ํธ ๋ ์ด์์ ์ก๊ธฐ
๋ ์ด์์ ์ ์ฉ
๐ก ํ
์คํธ์์๋ routes ์ ๋ณด๋ฅผ ํ์๋ก ํ๊ธฐ ๋๋ฌธ์, ํ
์คํธ๋ฅผ ํธ๋ฆฌํ๊ฒ ํ๊ธฐ ์ํด ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข์
App.tsx์์ ๋ถ๋ฌ์ค๊ธฐ
๐จ RouterProvider์ BrowserRouter๋ฅผ ๋์์ ์ธ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง
caught Error: You cannot render a <Router> inside another <Router>. You should never have more than one in your app.
๐ก App ์ปดํฌ๋ํธ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ฐ๋ก ๋ธ๋ผ์ฐ์ ๋ผ์ฐํฐ๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํด๋ ๋จ
4. createMemoryRouter
createMemoryRouter
App.tsx๋ฅผ ํ
์คํธํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์, routes.test.tsx๋ก ๋ณ๊ฒฝ
routes๊ฐ ๋ผ์ฐํ
์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์
createMemoryRouter๋ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ก์ ์ฌ์ฉํ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ๋ผ์ฐํฐ๋ ๋ฉ๋ชจ๋ฆฌ์์ ์์ฒด ๊ธฐ๋ก ์คํ์ ๊ด๋ฆฌ
Storybook๊ณผ ๊ฐ์ ํ
์คํธ ๋ฐ ์ปดํฌ๋ํธ ๊ฐ๋ฐ ๋๊ตฌ์ ์ฃผ๋ก ์ ์ฉํ์ง๋ง, ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ๋ชจ๋ ํ๊ฒฝ์์ React Router๋ฅผ ์คํํ๋ ๋ฐ์๋ ์ฌ์ฉํ ์ ์์
ํ
์คํธ ์ฝ๋ ์์ฑ
๋ฉ๋ชจ๋ฆฌ ๋ผ์ฐํฐ ๋ง๋ค์ด์ ํ
์คํธ