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
error
의status
값에 따라 다른 내용이 에러 메시지로 출력되도록 할 수 있다.
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
'Programming > React' 카테고리의 다른 글
[React.js] useSearchParams 훅 (React Router) (0) | 2024.07.08 |
---|---|
[React.js] defer() (React Router) (0) | 2024.07.07 |
[React.js] useFetcher 훅 (React Router) (0) | 2024.07.07 |
[React.js] json() 유틸리티 함수 (React Router) (0) | 2024.07.05 |
[React.js] React Router의 loader 속성 (0) | 2024.07.03 |
[React.js] 라우터 설정 방법 (React Router) (0) | 2024.07.02 |
[React.js] 리액트에서의 상태 관리 방법 (0) | 2024.06.30 |
[React.js] <form> 요소에서 제출(Submit) 버튼 사용 시 기본 동작 막는 방법 (0) | 2024.06.28 |