리액트 - 페이지 라우팅
PAGE ROUTING
ROUTING이란 어떤 네트워크 내에서 통신 데이터를 보낼 경로를 선택하는 일련의 과정이다.
데이터들도 네트워크 장치들을 환승하듯이 이동한다.
ROUTER - 데이터의 경로를 실시간으로 지정해주는 역할을 한다.
ROUTE + ING - 경로를 정해주는 행위 자체와 그런 과정들을 다 포함하여 일컫는다.
PAGE ROUTING이란?
요청에 따라 알맞은 페이지를 선택하고 반환해서 사용자가 그 페이지에 접속하는 행위이다.
예를 들어 /home 이라는 페이지를 요청하면 웹 서버에서는 이 요청에 맞는 Home.html 파일을 반환하고 사용자는 /home에 접속한다.
React SPA & CSR
여러개의 페이지를 준비했다가 적절한 페이지를 보내는 행위 → MPA(Multipage Application)
리액트는 SPA방식을 따른다. 단일페이지어플리케이션으로 페이지가 1개 밖에 없다. → SPA(Single Page Application)
리액트 앱이 알아서 업데이트하도록 하여 빠른 속도로 이동하도록 한다. → 페이지의 전환이 빨라진다.(SPA로 만들면 페이지들의 이동이 빠르다.)
웹 페이지 먼저 바꾸고 로딩보여주면서 데이터 가져온다.(클라이언트에서 렌더링을 다룸)→ CSR(Client Side Rendering)
라우팅을 사용하는 이유는 리액트가 SPA이기 때문이다.
React Router 기본
먼저 안 사용하는 파일들을 삭제해서 정리한다. (icon.png같은 것들!)
페이지 라우팅을 하기 위해서는 클라이언트 렌더링을 도와주는 라이브러리를 이용해야한다. → React Router라는 라이브러리를 사용하면 된다.
사이트에 들어가서 코드를 복사해 오면 된다.
복사한 코드는 터미널에 입력하면 된다. 2023년 1월 28일 기준으로 코드는
"npm install react-router-dom localforage match-sorter sort-by"
그리고 확인하는 방법은 package.json에 들어가서 dependencies에 설치한 라이브러리가 있는지 확인하면 된다. 보통 “react-router-dom:버전” 이런식으로 구성되어 있다.
확인 후 npm start로 구동시키면 완료!
라우팅 기능 사용하기
라우팅 기능을 사용하려면 BrowerRouter 컴포넌트를 최상위 태그로 감싸주면 된다.
앱에서 단 하나의 라우터만 사용해야한다.
- BrowerRouter : 브라우저 History API를 사용해 현재 위치의 URL을 저장해주는 역할이다.
- Routes: 자식 Route들을 구성하고 있는 단위
- Route:path를 통해 URL을 분기시킬 수 있다. 중첩해서 사용 가능(중첩 라우팅)
링크 이동하기
페이지를 갱신하지 않고 렌더링 방식으로 이동하려면 Link 컴포넌트를 사용하면 된다.
HTML 앵커 태그로 자동으로 변환해준다.
import{Link} from "react-router-dom";
function Nav(){
return(
<div>
<Link to={'/'}>Home</Link>
<Link to={'/board'}>Board</Link>
<Link to={'/profile'}>Profile</Link>
</div>
);
}
export default Nav;
React Router 응용
React Router Dom의 유용한 기능
REACT ROUTER V6
REACT에서 CSR기반의 페이지 라우팅을 할 수 있게 해주는 라이브러리
Path Variable
useParams
Query String
useSearchParams
Page Moving
useNavigate
Path Variable
'{ }'을 이용해서 변수명을 지정하고, PathVariable을 이용해서 지정된 이름의 변숫값을 얻을 수 있다. → 전달받은 파라미터들을 객체(’{}’)로 받는다.
리액트 라우터에서 콜론(:)과 useParams hook을 이용해 URL 피라미터를 받을 수 있다.
id는 해당 Path Parameter의 이름을 의미해 변수 이름을 임의로 지정할 수 있다.
(꼭 id가 아니여도 된다.)
ex) :product → Path Parameter = product
React에 있는 것이 아니라 React 라이브러리에 있으며 use가 들어간 사용자 정의 훅들을 ‘커스텀 훅’이라 한다. → 여러가지 커스텀 훅이 있는데 확인하려면 여기로
Path Variable은 특정한 자원에 접근하는 목적에 사용하는 것이 좋다.
ex) 아래 예제에서 Path Variable을 id로 받기로 약속했다.
import {useParams} from "react-router-dom";
const Diary => ()=>{
const {id} => useParams();
<Routes>
<Route path=”/diary/:id” elements={<Diary />} />
</Routes>
}
export default Diary;
그래서 diary components로 가서 const {id} ⇒ useParams();로 꺼내와야한다.
Query String
Path Variable같이 유사한 역할을 하고 웹 페이지에 데이터를 전달하는 가장 간단한 방법이다.
URL를 사용하면서 ?키워드 뒤에 name과 value를 엮어서 데이터를 전송할 수 있는 기법
ex) edit?id=10&mode=dark ⇒ Query String
사용하기 간편해서 굉장히 자주 사용한다!!
Query String은 정보가 많을 때 사용하기 좋다. → 페이지네이션,필터링할 때 유리함
*페이지네이션 : 콘텐츠를 여러 페이지로 나누고, 이전 혹은 다음 페이지로 넘어가거나 특정 페이지로 넘어갈 수 있는 일련의 링크를 페이지 상단이나 하단에 배치하는 방법이다. ex)구글 검색 사이트
Query String 사용 방법
다른 변수를 주고 싶으면 &를 사용하면 된다.
별도의 처리를 안해줘도 알아서 웹핑?이 된다.
라우팅에 영향을 끼치지 않기 때문에 <Link>에 따로 명시하지 않아도 된다.
useSearchParams hook을 사용해 값을 확인할 수 있다.
useSearchParams 메서드로 배열을 받아올 수 있는데 비구조화 할당을 통해 두 개의 프로퍼티들을 가져올 수 있다. (자유롭게 이름 지정 가능)
하지만 useSearchParams는 이름 변경하면 안된다.
import {useSearchParams} from "react-router-dom"
const Edit = () => {
const [serchParams,setSearchParams] => useSearchParams();
const id= searchParams.get('id');
//get를 통해 전달 받은 QuerySting들을 꺼내 쓸 수 있다.
//searchParams는 Query String의 Key에 대한 value를 가져온다.
const mode = searchParams.get('mode');
return(
<div>
<h1>Edit</h1>
<p>이곳은 일기 수정 페이지입니다.</p>
<button onClick={()=> setSearchParams({who:"me"})} >QS바꾸기</button>
//버튼을 누르면 setSearchParams가 searchParams를 변경해 ‘edit?whod=me’로 바뀐다.
//setSearchParams는 useState처럼 searchParams를 변경할 수 있다.
</div>
);
};
export default Edit;
Page Moving
Link 대신 useNavigate()을 이용해 의도적으로 사이트를 이동할 수 있다.
useNavigate()를 통해 navigate라는 이름의 함수를 선언해주고 각 버튼을 클릭하면 해당 경로의 컴포넌트로 이동하게 된다.
navigate(-1)를 하면 뒤로 간다는 의미로 뒤로 가기 기능을 줄 수 있다.
import {useNavigate, useSearchParams} from "react-router-dom";
const Edit = () => {
const navigate = useNavigate();
const [searchParams,setSearchParams] => useSearchParams();
const id= searchParams.get('id');
//get를 통해 전달 받은 QuerySting들을 꺼내 쓸 수 있다.
//searchParams는 Query String의 Key에 대한 value를 가져온다.
const mode = searchParams.get('mode');
return(
<div>
<h1>Edit</h1>
<p>이곳은 일기 수정 페이지입니다.</p>
<button onClick={()=> setSearchParams({who:"me"})} >QS바꾸기</button>
//버튼을 누르면 setSearchParams가 searchParams를 변경해 ‘edit?whod=me’로 바뀐다.
//setSearchParams는 useState처럼 searchParams를 변경할 수 있다.
<button onClick={()=>navigate("/home")}>Home으로 가기</button>
//누르면 home으로 사이트를 이동할 수 있다.
<button onClick={()=>navigate(-1)}>뒤로가기</button>
//navigate(-1)로 하면 뒤로 가기가 가능하다.
</div>
);
};
export default Edit;