Router

createBrowserRouter()

BrowserRouter๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋กœ, v6์—์„œ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ๋ผ์šฐํŒ… ์„ค๊ณ„ ๋ฐฉ๋ฒ•

ํ•ด๋‹น ๋ผ์šฐํŒ… ์„ค๊ณ„๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด v6.4์— ์ถ”๊ฐ€๋œ Data APIs๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Data APIs๋ž€?

๋ผ์šฐํ„ฐ๊ฐ€ ๋ Œ๋”๋งํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋Šฅ ๋“ฑ, ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ์™€ ๊ด€๋ จ๋œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค์ด ๋Œ€๊ฑฐ ์ถ”๊ฐ€ ๋˜์—ˆ๋‹ค.

function createBrowserRouter(
  routes: RouteObject[],
  opts?: {
    basename?: string;
    future?: FutureConfig;
    hydrationData?: HydrationState;
    window?: Window;
  }
): RemixRouter;
  • routes โ†’ ๋ผ์šฐํŠธ ๊ฐ์ฒด ๋ฐฐ์—ด

  • basename โ†’ ์•ฑ์˜ ๊ธฐ๋ณธ ์ด๋ฆ„, '/app' ์ด๋ผ๊ณ  ์„ค์ •์‹œ '/'๋Š” '/app'์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

import { createBrowserRouter, RouterProvider } from 'react-router-dom';

const router = createBrowserRouter([
  {
    path: '/',
    element: <Layout />,
    children: [
      { index: true, element: <HomePage /> },
      { path: '/dashboard', element: <DashboardPage /> }
    ]
  }
]);

function App() {
  return (
    <ReactProvider router={router} />
  );
}

Routes.tsx

ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋„ ๋ผ์šฐํŠธ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์šฐํŠธ ๊ฐ์ฒด ๋ฐฐ์—ด์„ ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๊ด€๋ฆฌ

routes.tsx

createRoutesFromElements()

React Element ๋ฐฐ์—ด์„ ๋ผ์šฐํŠธ ๊ฐ์ฒด ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

createBrowserRouter()๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ด์ „์— ์‚ฌ์šฉ๋˜๋˜ JSX ํ˜•ํƒœ๋กœ ๋ผ์šฐํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Usage

createMemoryRouter()

Test ํ™˜๊ฒฝ์—์„œ createBrowserRouter ๋Œ€์‹  createMemoryRouter๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • initialEntries โ†’ ์ดˆ๊ธฐ ์—”ํŠธ๋ฆฌ ๋ชฉ๋ก ์„ค์ •, ์ฆ‰ ํ…Œ์ŠคํŠธํ•  ํŽ˜์ด์ง€์˜ ์ฒซ ๋ Œ๋”๋ง ๊ฒฝ๋กœ ์„ค์ •

    • ๋ฐฐ์—ด์ธ ์ด์œ ๋Š” ๋ธŒ๋ผ์šฐ์ € ํžˆ์Šคํ† ๋ฆฌ ์Šคํƒ๊ณผ ๋™์ผ, (๋’ค๋ก๊ฐ€๊ธฐ, ์•ž์œผ๋กœ๊ฐ€๊ธฐ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•จ)

  • initialIndex โ†’ ์ดˆ๊ธฐ ์—”ํŠธ๋ฆฌ ๋ชฉ๋ก[๋ฐฐ์—ด] ์ค‘ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๊ฒฝ๋กœ๋ฅผ ์„ ํƒ

ํ•ด๋‹น ํ•จ์ˆ˜๋„ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’ํžˆ๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜๋กœ ์ถ”์ถœํ•˜์ž.

MemoryRouter VS createMemoryRouter()

๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋ผ์šฐํŒ…์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

createMemoryRouter()๋Š” ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ „์ฒด ๋ผ์šฐํŒ… ์ •๋ณด๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€์„œ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด์ ์ธ ๋ผ์šฐํŒ… ์ƒํ˜ธ์ž‘์šฉ์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์ ํ•ฉํ• ๊ฒƒ ๊ฐ™๋‹ค.

๋ฐ˜๋ฉด MemoryRouter๋Š” ๋ผ์šฐํŠธ๋ฅผ ์ฃผ์ž… ๋ฐ›๋Š” ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปค์Šคํ…€ํ•˜๊ธฐ ์‰ฝ๊ณ , ์ข€ ๋” ์œ ์—ฐํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์„œ ํŠน์ • ๋ผ์šฐํŒ… ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์ ํ•ฉํ•  ๊ฒƒ ๊ฐ™๋‹ค.

Last updated