3. Router

React Router 버전 6.4부터 지원하는, 라우터 객체를 사용해보자.

라우팅 정보만 별도의 파일로 관리, Outlet에서 분기된다.

import { Outlet } from "react-router-dom";

function Layout() {
  return (
    <div>
      <Header />
      <Outlet />
      <Footer />
    </div>
  );
}

const routes = [
  {
    element: <Layout />,
    children: [
      { path: "/", element: <HomePage /> },
      { path: "/about", element: <AboutPage /> },
    ],
  },
];

export default routes;

App 컴포넌트를 거치지 않고 바로 브라우저 라우터 만들어서 사용할 수 있다

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

import routes from "./routes";

const router = createBrowserRouter(routes);

root.render(
  <React.StrictMode>
    <RouterProvider router={router} />
  </React.StrictMode>
);

테스트할때 사용하는 createMemoryRouter

describe("App", () => {
  function renderRouter(path: string) {
    const router = createMemoryRouter(routes, { initialEntries: [path] });
    render(<RouterProvider router={router} />);
  }
  context('when the current path is " / "', () => {
    it("renders the home page", () => {
      renderRouter("/");
      screen.getByText(/Welcome/);
    });
  });

  context('when the current path is " /about "', () => {
    it("renders the about page", () => {
      renderRouter("/about");
      screen.getByText(/This is Test/);
    });
  });
});

Last updated