일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩독학
- 코딩초보
- http
- git
- 깃
- 타입스크립트
- CSS
- redux
- 코린이
- 참조자료형
- react-router
- 프론트엔드
- 사용하는 이유
- Vue3
- 리액트 네이티브
- react
- 리액트
- 비동기
- scss
- SasS
- 리덕스
- 코딩기초
- useEffect
- async
- 자바스크립트
- TypeScript
- html기초
- JavaScript
- 코딩공부
- React Native
- Today
- Total
맨 땅에 프론트엔드 개발자 되기
React Router v6 자주 쓰는 훅(hook) 정리 본문
React Router는 리액트의 라우팅 관련 라이브러리들 중에서 가장 오래됐고, 가장 많이 사용되고 있다. v6로 업그레이드 되면서 React Hooks 를 기반으로 한 React Router Hooks 들이 추가되었다. 쿼리스트링 파서(parser)를 따로 설치하지 않아도 될 정도로 편리한 기능들이 있어서 정리해보려고 한다.
기본 설치
$ npx creat-react-app react-router-practice
$ npm i react-router-dom
프로젝트에 라우터 적용
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import { BrowserRouter } from 'react-router-dom';
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root')
);
이제 BrowserRouter로 감싸진 children 안에서 React Router 를 사용할 준비가 되었다.
v5에서 v6로 업그레이드 되면서 가장 큰 차이점은 Switch 대신 Routes를 사용한다는 점이다. React Router의 공식문서에서는 Switch 대신 Routes를 쓰는 것이 버그를 줄여주고 더 예측 가능한 라우팅을 가능하게 한다고 설명한다.
// v5의 라우팅 형식
import {
BrowserRouter,
Switch,
Route,
} from "react-router-dom";
function App() {
return (
<BrowserRouter>
<Switch>
<Route exact path="/">
<Home />
</Route>
<Route path="/users">
<Users />
</Route>
</Switch>
</BrowserRouter>
);
}
// v6의 라우팅 형식
import {
BrowserRouter,
Routes,
Route,
Navigate,
} from "react-router-dom";
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="users/*" element={<Users />} />
<Route path="*" element={<Navigate replace to="/" />} />
</Routes>
</BrowserRouter>
);
}
useLocation
import { useEffect, useState } from 'react';
import { useLocation } from 'react-router-dom';
export default function Example() {
const { pathname, search, state } = useLocation();
const [title, setTitle] = useState();
useEffect(() => {
if(pathname === '') {
setTitle('This is Home');
} else if (pathname === 'info') {
setTitle('This is Info page');
} else {
setTitle('This is empty page');
}
}, [pathname]);
return (
<h1>{title}</h1>
)
}
useLocation 훅은 location 객체를 반환하는 훅으로 pathname, search, state 등에 접근할 수 있다. 보통 pathname에 따라 상태값을 변경하고 싶을 때 많이 사용한다.
useNavigate
import { createSearchParams, useNavigate } from 'react-router-dom';
export default function Example() {
const navigate = useNavigate();
return (
<>
<button
onClick={() => navigate('/')}
>Go to Home</button>
<button
onClick={() => navigate({
pathname: '/article',
search: createSearchParams({
category: 'javascript',
currentPage: 1
}).toString(),
})}
>Go to Article</button>
</>
)
}
useNavigate 훅은 라우팅 기능을 가지고 있는 함수를 리턴하는 훅으로 페이지 이동을 할 때 사용한다. pathname을 파라미터 값으로 바로 넣어주거나 객체에 값을 할당해 넣어줄 수 있다. createSearchParams와 함께 사용하면 쿼리 스트링(search) 값을 넣어주면서 페이지 이동을 할 수 있다.
useParams
useParams는 URL 파라미터 값을 리턴하는 훅으로 자세한 내용은 이전 게시물을 참고하길 바란다.
useSearchParams
import { useEffect } from 'react';
import { useSearchParams } from 'react-router-dom';
function Example() {
const [searchParams, setSearchParams] = useSearchParams();
const categoryParam = searchParams.get('category');
const currentPageParam = searchParams.get('currentPage');
useEffect(() => fakeDataFetch({category: categoryParam, page: currentPageParam}), [categoryParam, currentPageParam]);
const handlePageClick = (pageNum) => {
setSearchParams({category: categoryParam, currentPage: pageNum});
}
return (
<Pagination onClick={handlePageClick} />
)
}
useSearchParams는 쿼리스트링에 접근할 수 있게 해주는 훅이다. useState처럼 배열에서 구조분해할당으로 꺼내 쓸 수 있다. 앞에 선언된 searchParams가 getter 이고, setSearchParams가 setter 다.
참고
'코딩 공부 일지 > React JS' 카테고리의 다른 글
React에서 react-i18next 사용하는 방법 (3) | 2023.04.20 |
---|---|
React 외부 영역 클릭 시 닫기 (0) | 2022.11.30 |
React Input에 defaultValue를 key와 함께 설정하기 - 에러 기록 (2) | 2022.08.04 |
Redux-Saga 사용방법 정리 (0) | 2022.07.13 |
React 로컬 스토리지를 이용하여 하루 동안 보이지 않기 구현하기 (0) | 2022.07.08 |