티스토리 뷰
728x90
반응형
createBrowserRouter는 React Router v6.4 이상에서 소개된 데이터 중심 라우팅 기능을 제공하는 함수로, 브라우저 기반의 라우터를 생성합니다. 기존의 <BrowserRouter>보다 라우터 구성과 데이터 로딩에 대한 제어를 더 세밀하게 할 수 있습니다.
1. 기본 개념
createBrowserRouter는 라우트 정의를 통해 브라우저 라우터를 생성하며, 이를 <RouterProvider>로 연결하여 애플리케이션에 적용합니다.
2. 설치
React Router를 설치해야 합니다.
npm install react-router-dom
3. 기본 사용법
다음은 createBrowserRouter의 기본적인 사용법입니다.
App.tsx
import React from "react";
import ReactDOM from "react-dom/client";
import { createBrowserRouter, RouterProvider } from "react-router-dom";
// 페이지 컴포넌트
const Home = () => <h1>Home Page</h1>;
const About = () => <h1>About Page</h1>;
const Contact = () => <h1>Contact Page</h1>;
// 라우터 정의
const router = createBrowserRouter([
{
path: "/",
element: <Home />,
},
{
path: "/about",
element: <About />,
},
{
path: "/contact",
element: <Contact />,
},
]);
// React 애플리케이션 렌더링
const App = () => {
return <RouterProvider router={router} />;
};
const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement);
root.render(<App />);
4. 단계별 설명
4.1 createBrowserRouter
- 역할: 라우트를 구성하여 브라우저 히스토리 기반의 라우터를 생성합니다.
- 형식: 배열 형태로 경로(path)와 해당 경로에 렌더링할 요소(element)를 설정합니다.
- 예:
const router = createBrowserRouter([
{
path: "/",
element: <Home />,
},
{
path: "/about",
element: <About />,
},
]);
4.2 RouterProvider
- 역할: createBrowserRouter로 생성된 라우터를 React 애플리케이션에 주입합니다.
- 사용법:
<RouterProvider router={router} />;
5. 중첩 라우팅
중첩 라우팅을 통해 부모-자식 관계의 라우트를 구성할 수 있습니다.
const router = createBrowserRouter([
{
path: "/",
element: <Layout />, // 공통 레이아웃 컴포넌트
children: [
{ path: "", element: <Home /> },
{ path: "about", element: <About /> },
{ path: "contact", element: <Contact /> },
],
},
]);
Layout 컴포넌트 예:
const Layout = () => (
<div>
<header>Header</header>
<main>
<Outlet /> {/* 자식 라우트가 렌더링되는 자리 */}
</main>
<footer>Footer</footer>
</div>
);
6. 데이터 로더 사용
createBrowserRouter는 라우트마다 데이터를 로드할 수 있는 **로더(loader)**를 지원합니다.
const router = createBrowserRouter([
{
path: "/",
element: <Home />,
loader: async () => {
// 데이터를 비동기로 가져옴
const response = await fetch("/api/home");
return response.json();
},
},
]);
로드된 데이터 사용:
- useLoaderData 훅을 사용하여 데이터를 접근할 수 있습니다.
import { useLoaderData } from "react-router-dom";
const Home = () => {
const data = useLoaderData();
return <div>{JSON.stringify(data)}</div>;
};
7. 에러 처리
각 라우트에 대해 에러 페이지를 정의할 수 있습니다.
const router = createBrowserRouter([
{
path: "/",
element: <Home />,
errorElement: <h1>Something went wrong!</h1>,
},
{
path: "/about",
element: <About />,
errorElement: <h1>Page Not Found</h1>,
},
]);
8. Protected Routes (인증 처리)
Protected Route를 구현할 때 loader를 사용하여 인증을 처리할 수 있습니다.
const router = createBrowserRouter([
{
path: "/dashboard",
element: <Dashboard />,
loader: async () => {
const isAuthenticated = await checkAuth();
if (!isAuthenticated) {
throw new Response("Unauthorized", { status: 401 });
}
},
errorElement: <UnauthorizedPage />,
},
]);
9. 전체 코드 예제
import React from "react";
import ReactDOM from "react-dom/client";
import { createBrowserRouter, RouterProvider, Outlet } from "react-router-dom";
// 공통 레이아웃
const Layout = () => (
<div>
<header>Header</header>
<main>
<Outlet />
</main>
<footer>Footer</footer>
</div>
);
// 페이지 컴포넌트
const Home = () => <h1>Home Page</h1>;
const About = () => <h1>About Page</h1>;
const NotFound = () => <h1>404 - Not Found</h1>;
// 라우터 정의
const router = createBrowserRouter([
{
path: "/",
element: <Layout />,
children: [
{ path: "", element: <Home /> },
{ path: "about", element: <About /> },
],
errorElement: <NotFound />,
},
]);
// 애플리케이션 렌더링
const App = () => {
return <RouterProvider router={router} />;
};
const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement);
root.render(<App />);
요약
- 라우터 생성: createBrowserRouter로 라우트 정의.
- 라우터 주입: <RouterProvider>를 사용하여 앱에 연결.
- 중첩 라우팅: 부모-자식 관계로 라우트를 구성.
- 로더: 데이터 로딩 및 인증 처리.
- 에러 처리: 에러 발생 시 렌더링할 컴포넌트 정의.
728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 문자 자르기
- In App Purchase
- MainActor
- 진수 변환
- error-java
- jsp 오픈 소스
- jstl(java standard tag library)-core
- jstl(java standard tag library)
- System.Diagnostics
- 인텔리제이(intellij)
- java.sql
- 특정 문자를 기준으로 자르기
- 제품 등록
- React
- 스프링 프레임워크(spring framework)
- java 키워드 정리
- .submit()
- 스프링 시큐리티(spring security)
- 표현 언어(expression language)
- nl2br
- 스프링 시큐리티(spring security)-http basic 인증
- system.io
- java-개발 환경 설정하기
- java web-mvc
- await
- REST API
- 스프링 프레임워크(spring framewordk)
- 메이븐(maven)
- 람다식(lambda expression)
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함