본문 바로가기

React.js

React Route

이번 시간은 리액트 라우터에 대해서 배워볼 것입니다.

라우터가 뭘까요?

사전적 정의로는 '각 메시지에서 목적지까지 갈 수 있는 여러 경로 중 한 가지 경로를 설정해 주는 과정' 이라는데

그럼 이 것을 왜 해야할까요?

 

그것은 리액트의 장단점에서 찾아볼 수 있습니다.

리액트는 Single Page Application입니다. 

그래서 페이지가 바뀔때 새로고침이 되지 않아 ux적인 측면에서 유용하다고 볼 수 있습니다.

이 장점 덕분에 많은 사람들이 사용하지만 단점도 존재합니다

앱의 규모가 커진다면 불 필요한 코드까지 렌더링 해야되서 로딩속도가 느려질 수 있습니다.

 

이 단점을 해결하기 위해 React router을 쓸 수 있습니다.

해당페이지에서 필요없는 정보들은 주소를 나눠서 담을 수 있습니다.

예를들어 abcd.com 이라는 사이트가 있다면 홈 화면에 모든 정보를 담는게 아니라

abcd.com/cart

abcd.com/mypage

등등 정보를 나누어 담아 불필요한 리소스를 사용하지 않을 수 있습니다.

 

그럼 React Router에 대해 배워보겠습니다.

 

 

 

React router를 사용하기 위해서는 먼저 "리액트 라우터 돔''을 설치하여야 합니다.

터미널에서 " npm install react-router-dom " 을 통해 설치할 수 있습니다

 

React router의 구성요소는 크게

1. BrowserRouter

2. Route

3. Switch

4. Link

5. NavLink

6. useParams

가 있습니다.

 

1. BrowserRouter

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

로 BrowserRouter을 import합니다.

이 component는 react-router-dom을 적용하고싶은 컴포넌트의 최상위 컴포넌트에 감싸주는 wraper역할을 합니다.

예를 들면 render함수안의 <App/>을 감싸주면 됩니다.

Router을 사용할 Component를 지정해준다고 생각하시면 됩니다.

 

React router BrowserRouter

2. Route

url에 따라 달라지게 하려면 Route를 추가 import합니다.

달라지게하려는 component를 route component로 감싸고 prop으로 path 값을 줍니다.

Ex) <Route exact path="/"><Home></Home></Route>

-> path 앞에 exact를 붙임이면 정확히 “/“ 일때만 routing됩니다.

 

-> exact를 붙이지 않으고 path가 

  <Route path="/"><Home></Home></Route>

  <Route path="/2"><Home></Home2></Route>

  <Route path="/3"><Home></Home3></Route>

이렇게 있다고 치면 url을 "/2", "/3"을 쳐도 맨 위에있는 "/" 로 가버리기 때문에 exact를 붙여야 합니다.

 

 

3. Switch(자식으로 Route 필요, route는 해당 url 여러개 표시. but Switch는 해당하는것 하나만)

Switch 를 import하고 route component를 감싸주면 path와 일치하는 첫번째 component가 발견되면 나머지 component를 버립니다.

path = “/“ 이면 나머지 path의 component는 출력이 안됩니다.

-> switch를 쓰려면 path =“/“를 제일 밑에놔두거나 exact를 붙여서 사용해야 합니다.

-> 맨위에 exact path =“/“를 두고 마지막에 path=“/“를 두면 사용자가 이상한 url로 들어왔을때의 component를 띄울수 있다.( 싱글 웹앱이라 설정안하면 아무경로나 들어오든 같은 페이지 보여주기 때문에 필요)

 

4. Link

Link를 import하고 a tag대신 Link를 쓰고 href 대신 to 를 쓰면 page가 reload되지않고 변합니다.(싱글웹앱의 장점을 살릴수 있음)

 

5. NavLink

Link에 기능이 조금 더 부과된것이에요.

NavLink component를 클릭시 class 명으로 active가 추가되어 사용자가 어디에있는지 직관적으로 알 수 있습니다.

(css를 통하여 active된곳의 색을 다르게한다거나 다른 이펙트를 줘서 꾸미는 등을 할 수 있습니다)

 

이제 그림을 통해 설명드리도록 할게요.

 

react의 최상단 페이지고 여기에서 작업을 했습니다.

BrowserRouter로 <App/> component를 감싸주고 시작합니다.

 

NavLink를 통해 Home, topics, contat를 클릭하면 "/", "/topics", "/contact" 의 url로 가도록 만들었습니다

그후 Switch 와 Router을 통해 해당 경로가 들어오면 각각 Home, Topics, Contact의 컴포넌트를 불러오라고 지정했습니다.

 

 

6. useParams()

하나의 route를 가지고 path의 정보가 무엇이냐에 따라서 정보를 가지고와서 처리하는게 가능하록 하는 기능입니다.

이 기능을 쓰려면 마찬가지로 import {useParams} from 'react-router-dom'; 를 통해 import를 해주시고 사용하면 됩니다.

 

예시)

<Route path="/products/:product_id"><Product></Product></Route>

-> path에 :product_id 라는 임의의 기호를 넣게되면 저 자리에 들어오는 값들이 (ex 1,2,3...) 하위 component에 전달되고 그 전달된 값을 받기위해서 하위 component안에 useParams를 써서 /:product_id에 들어오는 값을 받아올수 있습니다.

ex)

products/1 일땐 products component내의 useParams()의 product_id는 1이될 것 이고

products/2 일땐 products component내의 useParams() product_id 2이될 것 입니다.

 

 

 

- 이 노트는 생활코딩의 유튜브 강의를 통해 배운 내용을 정리한 것입니다.

- 초보 개발자라 부족한 점이 아직 많습니다. 다른 의견이 있으시다면 자유롭게 남겨주세요.

- 처음 접하시는 분께는 다소 어려울 수 있지만 어느 정도 개념이 잡히신 분께 도움이 되었으면 하는 바람에서 작성된 글입니다.

'React.js' 카테고리의 다른 글

React proxy  (0) 2020.11.13
React Ajax  (0) 2020.11.13
React Hook(useEffect)  (0) 2020.11.10
React Hook(useState)  (0) 2020.11.06
React class vs function  (0) 2020.11.04