Lv1_junior_dev
자라나라실력실력
Lv1_junior_dev
전체 방문자
오늘
어제

주인장 GitHub 바로가기

    • 분류 전체보기 (110)
      • 주절주절 (6)
      • 프로젝트 회고록 (3)
      • 꿀팁 (3)
      • 알고리즘 풀이 (26)
      • 자바스크립트 - Vanilla JS (25)
      • 자바스크립트 - React.js (37)
      • 자바스크립트 - Next.js (4)
      • 자바스크립트 - TypeScript (5)
      • HTML (0)
      • CSS (1)

    인기 글

    hELLO · Designed By 정상우.
    Lv1_junior_dev

    자라나라실력실력

    [React.js] Router 라이브러리에 대해서
    자바스크립트 - React.js

    [React.js] Router 라이브러리에 대해서

    2022. 11. 14. 19:21

    ❓ Router

    사용자가 요청한 URL에 따라 해당 URL에 맞는 페이지를 보여주는 것

     

    간단한 라이브러리이니 바로 셋팅법과 사용법 등등에 대해서 알아보자

    npm install react-router-dom@6

    터미널에서 해당 명령을 통해 Router를 설치하자.

     

    그리고 src파일 안에 있는 index.js 내부의 코드에

    import { BrowserRouter } from 'react-router-dom'; // add
    
    const root = ReactDOM.createRoot(document.getElementById('root'));
    root.render(
      <React.StrictMode>
        <BrowserRouter> // add
        <App />
        </BrowserRouter> // add
      </React.StrictMode>
    );

    add라고 주석 처리한 세 곳에 저 코드 그대로 복붙 ! 

    끝.


    ❗ Route 기본 사용법

    Router 사용법은 간단하다.

    일단 맨 위에 

    import { Routes, Route, Link, useNavigate, Outlet } from 'react-router-dom'

    해당 코드를 먼저 추가해주자.

    이 번 포스팅에선 Routes, Route, Link, useNavigate, Outlet만 사용할 것이다.

     

    👍 각 정의에 대해선 다음과 같다

    ✔ Routes는 여러 Route를 감싸서 규칙이 일치하는 라우트 하나만을 렌더링 시켜주는 역할을 한다.
    ✔ Route는 path속성에 경로, element속성에는 컴포넌트를 넣어 준다. 여러 라우팅을 매칭하고 싶은 경우 URL 뒤에 *을 사용하면 된다.
    ✔ Link는 링크에서 사용하는 경로가 현재 라우트의 경로와 일치하는 경우 특정 스타일 또는 CSS클래스를 적용하는 컴포넌트이다.
    ✔ useNavigate는 다양한 경로를 이동할때, 동작하는 함수를 만들기 위해서 사용한다.
    ✔ Outlet은 nasted routes 하게 될 때 상위 라우터에 하위 라우트를 동시에 표현할 수 있게 된다.
        만약 Outlet을 쓰지않는다면 하위 라우트는 출력이 되지않는다.

    다음으로 <Routes>안에 <Route>를 넣고 사용하면 된다

    <Routes>
       <Route path="원하는 경로" element = {""}> </Route>
    </Routes>

    <Routes>안에 <Route>를 넣고 사용하면 된다

    path에는 해당 라우트의 경로를 지정하고 element는 경로로 이동했을 때 출력할 컴포넌트들을 정의해주면 된다.


    ❗ Nasted routes 란? (중첩 라우트)

    Nasted routes는 말 그대로 Route를 중첩 시키는 것이다.Route로 불러온 컴포넌트 내부에 Router가 하나 더 존재하는 형태인 것이다. 다만, 상위 컴포넌트의 URL값을 공유하고, 상태값을 주소값이 일부 대처하는 정도의 특징을 보인다.

     

    만약 쇼핑몰에서 상품들이 있고 상품들 중 1번 상품을 클릭했을 때 1번 상품에 해당하는 경로를 가진 홈페이지가 있다고 하자.

    <Routes>
        <Route path="/product" element={<div><AboutComponent/></div>}>
        <Route path="product1" element={<div>about member</div>}> </Route>
        </Route>
    </Routes>

    그럼 이렇게 <Routes>안에 <Route>를 넣고 가장 상위 <Route>안에 <Route>를 넣으면 된다

    이렇게 된다면 product1의 접근 방법은 /product/product1으로 접근이 가능한것이다.

    ✔ Nasted routes는 최상위 컴포넌트에서 변동되는 컴포넌트가 거의 없을 때 사용한다고 한다.


    ❗ URL Parameter

    Nasted routes과 함께 사용할 수 있는 기능을 하나 더 알아보고 가자.

    만약 어떤 쇼핑몰에 상품(product)가 100개있는 물건이 있다.

    그러면 어떻게 만들것인가 ?

    <Routes>
        <Route path="/product" element={<div><AboutComponent/></div>}>
        <Route path="1" element={<div>about member</div>}> </Route>
        <Route path="2" element={<div>about member</div>}> </Route>
        <Route path="3" element={<div>about member</div>}> </Route>
        <Route path="4" element={<div>about member</div>}> </Route>
    	....
        </Route>
    </Routes>

    이렇게 100개를 만들수는 없을터.

     

    그래서 여기서 쓸 수 있는게 바로 URL Parameter이다

    URL Parameter는 사용자가 /product/1, /product/2, /product/3 이렇게 입력했을 때

    Parameter 값으로 입력되는 1,2,3 같은 애들을 불러다가 쓰는거다

     

    사용법은 간단하다

    import { useParams } from "react-router-dom"

    제일 위에 임포트 해주고

    let {id} = useParams();
    
    console.log(id) // product/152를 입력하면 152가 출력된다

    해주면 끝이다.


    ❗ 404 페이지 만들기 (빈 페이지)

    만약 Route 해준 경로 이외의 경로에 접속했을 때는 404처리를 해서 사용자가 옳지못한 경로의 페이지로 접근했다고 알려주어야한다.

    해당 방법은 간단하다

    <Route path="*" element={<div>빈 페이지</div>}></Route>

    끝.

    '자바스크립트 - React.js' 카테고리의 다른 글

    [React.js] 성능개선 1 : lazy import  (1) 2022.11.29
    [React.js] useEffect에 대하여  (0) 2022.11.27
    [React.js] CSS-in-JS (Styled-components)에 대하여  (0) 2022.11.10
    [코딩애플/React.js] input 태그를 활용한 글 생성, 수정 예제 풀이  (1) 2022.10.25
    [React.js] props()에 대하여  (0) 2022.10.17
      '자바스크립트 - React.js' 카테고리의 다른 글
      • [React.js] 성능개선 1 : lazy import
      • [React.js] useEffect에 대하여
      • [React.js] CSS-in-JS (Styled-components)에 대하여
      • [코딩애플/React.js] input 태그를 활용한 글 생성, 수정 예제 풀이
      Lv1_junior_dev
      Lv1_junior_dev
      나는 성장이 고프다. 자라나라 개발 실력 !

      티스토리툴바