728x90
728x90
라우팅 관련 기능들 정리 (React Router) :
useNavigate, useNavigation, redirect, useLocation, useParams, useHistory, Navigate
들어가며
- 리액트(React.js)에서 라우팅을 위해 사용되는 관련 기능들에 대해 간단하게 정리해본다.
- 페이지 이동 및 라우팅을 위해 리액트 라우터(React Router)의 여러 훅과 컴포넌트, 함수들을 사용할 수 있다.

① useNavigate()
개념
- 리액트 라우터(React Router) v6 에서 제공하는 훅
- 프로그래밍적으로 다른 경로로 이동하기 위해 사용된다.
- 컴포넌트 내에서 버튼 클릭, 이벤트 발생 시 특정 페이지로 이동할 때 사용한다.
특징
push
와replace
를 설정할 수 있어 히스토리에 추가하거나 현재 히스토리를 교체할 수 있다.- 상태값을 전달하여 이동 후 데이터를 사용할 수 있다.
예제 코드
import { useNavigate } from 'react-router-dom'; function MyComponent() { const navigate = useNavigate(); const handleClick = () => { navigate('/new-page'); // '/new-page'로 이동 }; return <button onClick={handleClick}>Go to new page</button>; }
② useNavigation()
개념
- 주로 경로 변경 상태( 페이지 이동 중 로딩 상태 등)를 추적하는 데 사용된다.
idle
: 현재 페이지가 로드되었고, 로딩 중이 아닌 상태loading
: 현재 페이지가 로딩되고 있는 상태 → 로딩 스피너 표시하면 좋음.submitting
: 폼 제출 중인 상태 → 로딩 상태 표시하면 좋음.
- 페이지 이동 중에 로딩 스피너 등을 보여주고 싶은 경우에 사용하면 유용하다.
특징
navigation.state
값을 통해 페이지가 로드 중인지, 완료됐는지 등을 알 수 있다.useNavigate
처럼 이동을 직접 수행하는 것이 아니라, 이동 중 상태를 감시하는 용도로 주로 사용된다.
예제 코드
import { useNavigation } from 'react-router-dom'; function MyComponent() { const navigation = useNavigation(); if (navigation.state === 'loading') { return <p>Loading...</p>; } if (navigation.state === 'submitting') { return <p>Submitting...</p>; } return <p>Content loaded</p>; }
③ redirect()
개념
- 페이지가 리다이렉션될 때 사용되는 기능
- 주로 서버 사이드 렌더링(SSR)이나 조건에 따라 특정 경로로 강제 이동시키는 데 사용된다.
- 라우팅 설정에서 특정 조건에 따라 리다이렉션할 때 사용한다.
특징
- 서버 사이드 또는 클라이언트 사이드에서 사용 가능하다.
- 조건에 따라 강제적으로 다른 경로로 이동시키는 용도로 주로 사용된다.
예제 코드
import { redirect } from 'react-router-dom'; export function loader() { const isLoggedIn = false; if (!isLoggedIn) { return redirect('/login'); // 로그인이 안되어 있으면 로그인 페이지로 리다이렉트 } return null; }
④ useLocation()
개념
- 현재 URL의 경로 정보에 접근할 수 있는 훅
pathname
,search
,hash
등의 정보에 접근할 수 있어 현재 URL 상태를 기반으로 컴포넌트의 렌더링을 제어할 때 유용하다.
pathname
: 현재 URL의 경로search
: URL의 쿼리 문자열 (예 :?query=value
)hash
: URL의 해시 (예:#section
)
예제 코드
import { useLocation } from 'react-router-dom'; function MyComponent() { const location = useLocation(); return ( <div> <p>Current path: {location.pathname}</p> <p>Current query: {location.search}</p> <p>Current hash: {location.hash}</p> </div> ); }
⑤ useParams()
개념
- 동적 라우트 매개변수에 접근할 수 있는 훅
- URL에 포함된 매개변수를 가져와 해당 값을 기반으로 데이터를 요청하거나 렌더링할 때 사용한다.
- 예) URL이
/users/:id
일 때,id
값을 가져와 사용할 수 있다.
- 예) URL이
예제 코드
import { useParams } from 'react-router-dom'; function User() { const { id } = useParams(); // URL에서 동적으로 id 값 가져오기 return <p>User ID: {id}</p>; }
⑥ useHistory()
개념
- 리액트 라우터 v5에서 사용되었던 기능
- 리액트 라우터 v6부터는
useNavigate
로 대체되었다.
- 리액트 라우터 v6부터는
- 현재 히스토리를 조작하고 경로를 변경하는 데 사용되는 훅
예제 코드
import { useHistory } from 'react-router-dom'; function MyComponent() { const history = useHistory(); const goToHome = () => { history.push('/home'); // '/home' 경로로 이동 }; const goBack = () => { history.goBack(); // 이전 페이지로 이동 }; const replacePage = () => { history.replace('/login'); // '/login'으로 이동하며 히스토리 교체 }; return ( <div> <button onClick={goToHome}>Go to Home</button> <button onClick={goBack}>Go Back</button> <button onClick={replacePage}>Replace with Login</button> </div> ); }
useHistory는 React Router v6부터 useNavigate로 대체되어 더 이상 사용되지 않는다.
⑦ Navigate 컴포넌트
개념
- 주어진 경로로 사용자를 자동으로 리디렉션하는 컴포넌트
- 페이지를 프로그래밍적으로 이동시키기 위한 컴포넌트
- 주로 특정 조건이 만족되었을 때 자동으로 다른 경로로 리디렉션하고 싶을 때 사용한다.
- 예를 들어, 로그인 상태에 따라 사용자를 대시보드 페이지로 이동시키거나, 특정 페이지에서 다른 페이지로 리디렉션할 때 사용한다.
- 다음과 같은
props
를 지정할 수 있다.to
: 이동할 경로 지정 (문자열 형식)replace
- 기본값 :
false
true
로 설정하면 현재 경로를 히스토리에서 대체하여 뒤로 가기를 통해 이전 페이지로 돌아갈 수 없게 한다.
- 기본값 :
state
: 이동 시 전달할 상태 객체
예제 코드
import { Navigate } from 'react-router-dom'; function ProtectedRoute({ isLoggedIn }) { return isLoggedIn ? ( <h1>Welcome to the protected page!</h1> ) : ( <Navigate to="/login" replace={true} /> ); }
참고 사이트
useNavigate | React Router
reactrouter.com
useNavigation | React Router
reactrouter.com
redirect | React Router
reactrouter.com
useLocation | React Router
reactrouter.com
useParams | React Router
reactrouter.com
React Router: Declarative Routing for React
Learn once, Route Anywhere
v5.reactrouter.com
Navigate | React Router
reactrouter.com
728x90
728x90
'Programming > React' 카테고리의 다른 글
[React.js] URL의 파리미터(Parameter) 값 가져오기 (1) | 2024.10.02 |
---|---|
[React.js] index.js로 컴포넌트(Component), 페이지(Page) 관리하기 (0) | 2024.10.01 |
[React.js] Thunk API (Redux Toolkit) (1) | 2024.09.28 |
[React.js] 리액트 라우터(React Router) (0) | 2024.09.26 |
[React.js] 폼 데이터 처리하기 (React, React Router) (1) | 2024.09.26 |
[React.js] 무한 스크롤(Infinite Scroll), 스켈레톤(Skeleton) 효과 적용하기 (with React Query) (0) | 2024.09.23 |
[React.js] .env 파일 만들고 사용하기 (환경 변수 관리) (0) | 2024.09.23 |
[React.js] React Query Devtools (0) | 2024.09.22 |