페이지를 여러개 만들어주기
App.js
import './App.css';
import Aboutpage from './page/Aboutpage';
import Homepage from './page/Homepage';
function App() {
return (
<div>
<Homepage/>
<Aboutpage/>
</div>
);
}
export default App;
https://reactrouter.com/en/main/getting-started/installation
Installation
Installation This document describes the most common ways people use React Router with various tools in the React Ecosystem. Basic Installation Most modern React projects manage their dependencies using a package manager like npm or Yarn. To add React Rout
reactrouter.com
라우터 설치
npm install react-router-dom@6
오피셜 도큐먼트를 보면서 index.js 에 해당 코드를 붙여준다 (App.js 에도 마찬가지로 필요한 코드 넣어주기)
import { Routes, Route } from "react-router-dom";
import './App.css';
import Aboutpage from './page/Aboutpage';
import Homepage from './page/Homepage';
function App() {
return (
<div>
<Routes>
<Route path="/" element={<Homepage/>}/>
<Route path="/about" element={<Aboutpage/>}/>
</Routes>
</div>
);
}
export default App;
Aboutpage.js
import React from 'react'
import { useNavigate } from 'react-router-dom'
const Aboutpage = () => {
const navigate = useNavigate()
const goToHomepage = () => {
navigate('/') //가고 싶은 url 경로 입력
}
return (
<div>
<h2>About page</h2>
<button onClick={goToHomepage}> Homepage 로 이동! </button>
</div>
)
}
export default Aboutpage;
Restful Route : REST 규칙을 이용해서 만든 api 디자인 패턴
http 명령어와 URL을 매칭시켜 url 디자인을 좀 더 단순하고 통일성 있게 만들었다
http 명령어
GET : 데이터를 가져올 때 사용 (fetch 하면 기본 명령어 속성이 Get)
POST : 데이터 생성
PUT : 데이터 수정
DELETE : 데이터 삭제
RestFul Route의 필요성
페이지를 만드는 사람마다 url의 디자인이 달라진다면 이름의 통일성이 없어지고
어떤 아이템에 대해 생성(create), 읽기(read), 수정(update), 삭제(delete) 행위에 대해서 총 4개의 url이 필요하게 된다
이를 해결하기 위해 나온 게 Restful 디자인이다
url에서 동사는 빼고 이를 http 명령어로 대체한다
/items + get 명령어 : 아이템 읽어오기
/items + post 명령어 : 아이템 생성 하기
/items + put 명령어 : 아이템 수정 하기
/items + delete 명령어 : 아이템 삭제 하기
이런 규칙으로 items 라는 하나의 url로 4가지 액션을 할 수 있다
내가 하나의 아이템만 가져오고 싶다면 뒤에 아이템의 id를 붙이는 것도 Restful Route의 규칙이다
/items/:id + get 명령어 : id를 가진 아이템 읽어 오기
/items/:id + put 명령어 : id를 가진 아이템 수정 하기
/items/:id + delete 명령어 : id를 가진 아이템 삭제 하기
import { Routes, Route } from "react-router-dom";
import './App.css';
import Aboutpage from './page/Aboutpage';
import Homepage from './page/Homepage';
import Product from "./page/Product";
import ProductDetail from "./page/ProductDetail";
function App() {
return (
<div>
<Routes>
<Route path="/" element={<Homepage/>}/>
<Route path="/about" element={<Aboutpage/>}/>
<Route path="/product" element={<Product/>}/>
<Route path="/product/:id" element={<ProductDetail/>}/>
</Routes>
</div>
);
}
export default App;
Homepage.js
import React from 'react'
import { Link, useNavigate } from "react-router-dom";
const Homepage = () => {
const navigate = useNavigate();
const goProductPage = () => {
navigate('/product?q=pants');
}
return (
<div>
<h1>홈페이지</h1>
<Link to="/about">about page로 이동!</Link>
<button onClick={goProductPage}>프로덕트로 이동!</button>
</div>
)
}
export default Homepage
url id 설정
navigate('/product?q=pants');
ProductDetail.js
import React from 'react'
import { useParams } from 'react-router-dom';
const ProductDetail = () => {
const {id} = useParams()
return (
<div>
<h1>바지 상품 보여주는 뷰 {id}</h1>
</div>
)
}
export default ProductDetail;
useSearchParams() 배열을 반환 한다
import React from 'react'
import { useSearchParams } from 'react-router-dom';
const Product = () => {
let [query, setQuery] = useSearchParams();
console.log("쿼리 확인!", query.get('q'));
return (
<div>
<h1>모든 프로덕트 뷰</h1>
</div>
)
}
export default Product
query.get('q')
쿼리에 있는 q 값을 가져오겠다는 뜻!
콘솔창에 쿼리 확인! pants 라고 뜬다
프라이빗 페이지 만들어주기
로그인 화면 생성하기
App 안에 있는 PrivateRoute 는 함수가 아니라 컴포넌트이다! (대문자로 시작)
리다이렉트
authenticate == true? <UserPage/> : <Navigate to="/login"/>
Navigate to="이동할 url 페이지" => 이동할 페이지로 리다이렉트
const [authenticate, setAuthenticate] = useState(false)
const PrivateRoute = () => {
return authenticate == true? <UserPage/> : <Navigate to="/login"/>
};
여기서 useState 값이 true 라면
http://localhost:3000/user 로 이동 했을 때 user page의 내용이 나온다
'Dev. > React' 카테고리의 다른 글
React :: shopping site 만들기 02 (0) | 2022.09.15 |
---|---|
React :: shopping site 만들기 01 /폰트어썸 리액트 (0) | 2022.09.15 |
React :: 날씨 앱 만들기 (0) | 2022.08.29 |
React :: 라이프 사이클 (0) | 2022.08.24 |
React :: 클래스 컴포넌트 (0) | 2022.08.22 |
댓글