728x90
728x90

useRouterError 훅

들어가며

  • 리액트 라우터(React Router)의 useRouterError 훅에 대해 정리해본다.

 

useRouterError 훅

개념

  • 리액트 라우터 라이브러리(react-router-dom)에서 제공하는 훅
  • 라우트 처리 중 발생한 에러를 잡아서 처리하는 데 사용된다.
  • 주로 오류 경계(Error Boundary)와 함께 사용되어, 라우트 내에서 발생하는 오류를 처리하고 사용자에게 적절한 피드백을 제공하는데 사용된다.

 

주요 기능

  • 오류 감지: 라우트 컴포넌트에서 발생하는 오류를 감지할 수 있다.
  • 에러 핸들링: 감지된 오류를 사용자 정의 에러 메시지컴포넌트로 렌더링할 수 있다.
  • 오류 정보 제공: 오류 객체를 반환하여 오류 메시지, 스택 트레이스 등을 활용할 수 있다.

 

사용 예제

예제 1
  • 발생한 오류를 가져오고, 사용자에게 오류 메시지를 표시한다.
import React from 'react';
import { useRouteError } from 'react-router-dom';
function ErrorBoundary() {
const error = useRouteError();
console.error(error);
return (
<div>
<h1>Something went wrong!</h1>
<p>{error.message}</p>
</div>
);
}
export default ErrorBoundary;

 

예제 2
  • ErrorBoundary 컴포넌트를 라우트 설정에 추가하여, 잘못된 경로로 접근하거나 라우트 컴포넌트에서 발생한 오류를 처리한다.
  • ErrorBoundary 컴포넌트는 라우트 설정의 최상단에 배치되어야 하며, 특정 경로에 한정된 오류 처리가 필요하다면 해당 경로의 하위 컴포넌트에서 사용될 수 있다.
import React from 'react';
import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';
import HomePage from './HomePage';
import AboutPage from './AboutPage';
import ErrorBoundary from './ErrorBoundary';
function App() {
return (
<Router>
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/about" element={<AboutPage />} />
<Route path="*" element={<ErrorBoundary />} />
</Routes>
</Router>
);
}
export default App;

 

예제 3
  • errorstatus 값에 따라 다른 내용이 에러 메시지로 출력되도록 할 수 있다.
import { useRouteError } from "react-router-dom";
import PageContent from "../components/PageContent";
import MainNavigation from "../components/MainNavigation";
function ErrorPage() {
const error = useRouteError();
let title = "An error occurred!";
let message = "Something went wrong!";
if (error.status === 500) {
message = JSON.parse(error.data).message;
}
if (error.status === 404) {
title = "Not Found!";
message = "Could not find resource or page.";
}
return (
<>
<MainNavigation />
<PageContent title={title}>
<p>{message}</p>
</PageContent>
</>
);
}
export default ErrorPage;

 

  • createBrowserRouter를 사용하여 라우트를 설정할 경우, errorElement prop을 설정한 후, ErrorBoundary 컴포넌트를 해당 prop의 값으로 설정해준다.
  • 그리고 errorElement prop은 최상위 경로(/)에서만 설정해준다.
import { RouterProvider, createBrowserRouter } from "react-router-dom";
import HomePage from "./pages/Home";
import EventsPage, { loader as eventsLoader } from "./pages/Events";
import EventDetailPage from "./pages/EventDetail";
import NewEventPage from "./pages/NewEvent";
import EditEventPage from "./pages/EditEvent";
import RootLayout from "./pages/Root";
import EventsRootLayout from "./pages/EventsRoot";
import ErrorPage from "./pages/Error";
const router = createBrowserRouter([
{
path: "/",
element: <RootLayout />,
errorElement: <ErrorPage />,
children: [
{ index: true, element: <HomePage /> }, // path: ""
{
path: "events",
element: <EventsRootLayout />,
children: [
{
index: true, // path: ""
element: <EventsPage />,
loader: eventsLoader,
},
{ path: ":eventId", element: <EventDetailPage /> },
{ path: "new", element: <NewEventPage /> },
{ path: ":eventId/edit", element: <EditEventPage /> },
],
},
],
},
]);
function App() {
return <RouterProvider router={router} />;
}
export default App;

 

참고 사이트

 

useRouteError v6.24.1 | React Router

 

reactrouter.com

 

728x90
728x90

useRouterError 훅들어가며useRouterError 훅개념주요 기능사용 예제참고 사이트