본문 바로가기
react

[React] react router 설치 & 사용 & hook함수(useParams, useNavigate)

by 남민섭 2023. 1. 18.
728x90
반응형

참고 사이트

https://reactrouter.com/en/main

 

Home v6.6.2

I'm on v5 The migration guide will help you migrate incrementally and keep shipping along the way. Or, do it all in one yolo commit! Either way, we've got you covered to start using the new features right away.

reactrouter.com

 

리액트 라우터

각각의 url에 따라 선택된 데이터를 하나의 페이지에서 렌더링해주는 라이브러리


spa에서 새로운 페이지를 로드하지 않고 하나의 페이지안에서
필요한 컴포넌트만 가져와서 다른 페이지를 나타내는 방식을 지원

 

*라우팅: 사용자가 요청한 url에 따라 해당 url에 맞게 페이지를 보여주는 것


이전 mpa새로운페이지를 로드하며 페이지를 이동하는 방식
<a herf="sub.html"> 서브페이지</a>

 

ex.

글쓰기 페이지: 새로운 포스트 작성하는 페이지

포스트 목록 페이지: 블로그에 작성된 여러 포스트들의 목록을 보여주는 페이지

포스트 읽기 페이지: 하나의 포스트를 보여주는 페이지

 

이렇게 여러 페이지로 구성된 웹 애플리케이션을 만들 때 페이지별로 컴포넌트들을 분리해가면서 프로젝트를 관리하기 위해 필요한 것이 바로

라우팅 시스템!!!!!

리액트 시스템을 구축하기위해 사용할 수 있는 선택지는 크게 두가지있음

 

리액트 라우터(React Router):

이 라이브러리는 리액트의 라우팅 관련 라이브러리들 중에서 가장 오래됐고, 가장 많이 사용됨.

이 라이브러리는 컴포넌트 기반으로 라우팅 시스템 설정

 

Next.js: 

Next.js 는 리액트 프로젝트의 프레임워크입니다. 이 프레임워크는 우리가 사용했던 Create React App처럼 리액트 프로젝트 설정을 하는 기능, 라우팅 시스템, 최적화, 다국어 시스템 지원, 서버 사이드 렌더링 등 다양한 기능들을 제공함

이 프레임워크의 라우팅 시스템은 파일 경로 기반으로 작동합니다. 이 프레임워크는 리액트 라우터의 대안으로 많이 사용되고 있습니다.

 

 

리액트 라우터 적용 및 기본 사용법

프로젝트 생성 및 라이브러리 설치

  페이지를 만들고 이동해보기

URL 파라미터와 쿼리스트랑 사용해보기

 중첩된 라우트 구현하기

리액트 라우터의 부가기능 사용해보기

 

1) 라우터 설치하기

npm install react-router-dom


2) 라우터 사용하기

1. 상위 컴포넌트에서 라우터를 적용 --> <BrowserRouter>컴포넌트 사용

 

ex)

import { BrowserRouter } from 'react-router-dom';


<BrowserRouter>
	<App></App>
</BrowerRouter>

 

2. 페이지 컴포넌트 생성하기

Home.js

import React from 'react';
const Home = () => {
    return (
        <div>
            <h2>홈</h2>
            <p>가장 먼저 보여지는 페이지입니다.</p>
        </div>
    );
};
export default Home;

 

Product.js

import React from 'react';
const Product = () => {
    return (
        <div>
            <h2>제품페이지</h2>
            <p>제품페이지 입니다.</p>  
        </div>
    );
};
export default Product;

 

 

3. 경로에 따라 보여질 component를 설정 <Routes><Route>컴포넌트 사용

 

Routes컴포넌트는 여러 Route를 감싸서 그 중 url이 일치하는 라우트 단 하나만  렌더링 시켜줌
Route는 path속성에 경로, element속성에 컴포넌트를 지정


구문)

<Routes>
    <Route path="경로" element={<component/>}/>
    <Route path="경로" element={<component/>}/>
</Routes>

 

예시)

<Routes>
    <Route path="/" element={<Home/>}/>
    <Route path="/product" element={<Product/>}/>
</Routes>

//localhost: 3000/product

 

4. Link 컴포넌트를 사용하여 다른페이지로 이동하는 링크 설정

웹페이지에서 링크를 보여줄 때 a태그 사용

리액트 라우터를 사용하는 프로젝트에서 a태그를 바로 사용하면 안됨

이유는 a태그를 클릭하여 페이지를 이동할 때 브라우저에서는 페이지를 새로 불러오게 되기 때문

 

Link컴포넌트 역시 a태그를 사용하긴 하지만 페이지를 새로 불러오는 것을 막고 History API를 통해 브라우저 주소의 경로만 바꾸는 기능이 내장되어 있음

 

구문)

<Link to = "경로">링크 이름</Link>

 

Header.js 

import React from 'react';
import { Link } from 'react-router-dom';

const Header = ({sitename}) => {
    return (
        <div>
            <h1>{sitename}</h1>
            <ul>
                <li><Link to="/">home</Link></li>
                <li><Link to="/product">아이폰</Link></li>
            </ul>
        </div>
    );
};
export default Header;

 

App.js

<div className="App">
    <Header sitename="green"/>
    <Routes>
        <Route path='/' element={<Home/>}/>
        <Route path='/product' element={<Product/>}/>
    </Routes>
</div>

 

5. url 파라미터와 쿼리 스트링

페이지 주소를 정의할때 가끔 변화는 유동적인 값을 사용해야 할때도 있음.

 

1) URL파라미터 예시

/product/item1

URL 파라미터는 주소의 경로에 유동적인 값을 넣는 형태

 

2) 쿼리스트링 예시

/product?item=1&keyword=react

쿼리 스트링은 주소의 뒷부분에 ?문자열 이후에 key=value로 값을 정의하며 &로 구분하는 형태

 

 

♣ URL 파라미터는 ID 또는 이름을 사용하여 특정 데이터 조회할 때 사용

♣ 쿼리 스트링은 키워드 검색, 페이지네이션, 정렬방식 등 데이터 조회에 필요한 옵션을 전달할 때 사용

 

 

구문)

URL 파라미터 사용하기

Route 컴포넌트 path속성에서 params 객체의 키(/:키이름) 을 지정

<Route path='/product/:productname' element={<Product/>}/>

 

Link 컴포넌트의 to속성에서 값을 넘겨줌

<Link to="/product/item1">아이폰</Link>

 

useParams() hook함수 사용     

import { useParams } from 'react-router-dom';
const { productname } = useParams();

Route 컴포넌트에서 key값 넘기고 Link컴포넌트에서 value값을 넘기면 useParams()함수에 담아주고

객체를 리턴해줌 { productname: "item1"}

 


useNavigate()

Link컴포넌트를 사용하지 않고 다른페이지로 이동을 해야할 때

사용하는 Hook

const navigate =useNavigate();

 

이전페이지로 이동

navigate(-1)


경로로 이동

navigate('/product')

 

 

728x90
반응형

'react' 카테고리의 다른 글

[React]multer,postman  (0) 2023.01.20
[React]Node.js  (1) 2023.01.19
[React] react Icons 설치, Axios 설치  (0) 2023.01.16
[React] Hook 함수정리3(useReducer)  (0) 2023.01.14
[React] Hooks함수 정리2(useMemo, useCallback)  (0) 2023.01.13

댓글