230119 React 라우터 useNavigate()훅, Navigate컴포넌트
라우터의 부가적인 기능
2.useNavigate()훅 vs Navigate 컴포넌트
useNavigate() 훅
js의 history객체를 대신한다. -뒤로가기, 앞으로가기 등
이벤트에서 사용 -버튼 등과 연결해서 사용한다.
useNavigate훅은 특정 event가 발생할 때, url을 조작할 수 있는 함수를 제공한다.
-react v6에서 useHistory가 변화한 것. 똑같다.
-함수를 돌려준다.
-함수 안에 원하는 주소를 입력하면 된다.
- 1을 넣으면 앞으로가기, -1을 넣으면 뒤로가기.
태그 안에 함수를 바로 넣어도 됨
Header.js
import { Fragment } from "react";
import { Outlet, useNavigate } from "react-router-dom";
import styled from "./Header.module.css";
const Header = () => {
//useNavigate훅-함수반환
let nav=useNavigate();
const goHome=()=>{
nav('/')//경로
}
const goBack=()=>{
nav(-1)//뒤로가기, +1은 앞으로가기
}
return (
<Fragment>
<header className={styled.wrap}>
<h3>헤더파일</h3>
<ul className={styled.wrap_list}>
<li>목록</li>
<li>목록</li>
<li>목록</li>
</ul>
<div>
<button onClick={goHome}>홈화면</button>
<button onClick={goBack}>뒤로가기</button>
</div>
</header>
<section>
{/* 헤더 하위의 라우터 표현 */}
<Outlet />
</section>
</Fragment>
)
}
export default Header;
-버튼의 이벤트로 useNavigate훅 사용.
-useNavigate훅은 함수를 반환하므로 받은 함수에 경로나 -1을 넣어 이동과 뒤로가기를 구현.
Navigate 컴포넌트
리다이렉트기능 -Navigate컴포넌트를 만나는 순간 사용됨
렌더링시에 사용
<Navigate>컴포넌트는 렌더링 될 때 현재 위치를 변경한다.
useNavigate()훅과 비숫해보이지만 useNavigate훅은 렌더링과정!에 사용할 수 없다
(정말 사용하고 싶으면 useEffect훅 안에서. 단, 렌더링이 다 된 이후에 써야 함)
return구문을 만나기 전에 조건 등을 통해 넣는다. 그럼 렌더링과정에 결려서 동작한다.
태그에 replace속성으로 replace=(true)를 하면 기록을 남기지 않는다.
이 구문이 없으면 홈으로 돌아갔을 때, 뒤로가기를 누르면 다시 마이페이지에서 Navigate를 만난다. 뒤로가기가 무한루프임.
App.js에서
{/* navigate컴포넌트 */}
<Route path="/mypage" element={<MyPage/>}/>
Home.js에서
{/* navigate컴포넌트 */}
<li><Link to="/mypage">마이페이지</Link></li>
Mypage.js
import { Navigate/* , useNavigate */ } from "react-router-dom";
const MyPage=()=>{
/*
첫번째 렌더링 과정에서는 사용할 수 없음
let nav=useNavigate();
let loginYN=false; //로그인여부
if(loginYN===false){
nav('/');
}
*/
//권한이 없으면 리다이렉트
//replace={true}를 설정하면 기록을 남기지 않는다.
let loginYN=false;
if(loginYN===false){
return <Navigate to="/" replace={true}/>
}
return(
<div>
권한 있는 사람만 접근이 가능함.
</div>
)
}
export default MyPage;
이외에 다양한 기능들은 구글링할것
Next.js프레임워크를 사용하면 리액트(csr)을 ssr로 바꾸는게 가능.
Next.js는 서버 사이트 렌더링,
정적 웹 페이지 생성 등 리액트 기반 웹 애플리케이션 기능들을 가능케 하는 Node.js 위에서 빌드된
오픈 소스 웹 개발 프레임워크이다.