Router
๋ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์ฃผ์๋ฅผ ๊ฐ์งํ๋ ์ญํ ์ ํ๋ฉฐ, ์ฌ๋ฌ ํ๊ฒฝ์์ ๋์ํ ์ ์๋๋ก ์ฌ๋ฌ ์ข
์ ์ ๋ผ์ฐํฐ ์ปดํฌ๋ํธ๋ฅผ ์ ๊ณตํ๋ค.
$ cd <your new project directory>
$ npm install react-router-dom localforage match-sorter sort-by
ํ๋ก์ ํธ์ ๋ฆฌ์กํธ ๋ผ์ฐํฐ๋ฅผ ์ ์ฉํ ๋๋ src/index.js ํ์ผ์์ react-router-dom์ ๋ด์ฅ๋์ด ์๋ BrowserRouter๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ธ๋ฉด ๋๋ค.
import React from 'react';
import ReactDOM from 'react-dom/client';
import { BrowserRouter} from "react-router-dom";
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<BrowserRouter>
<App />
</BrowserRouter>
);
์ด์ ๋ฆฌ์กํธ ๋ผ์ฐํฐ๋ฅผ ํตํด ์ฌ๋ฌ ํ์ด์ง๋ก ๊ตฌ์ฑ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ธฐ ์ํ์ฌ ๊ฐ ํ์ด์ง์์ ์ฌ์ฉํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๋ฉด ๋๋ค.
import React from 'react'
const Loginpage = () => {
return (
<div>
<h1>Login Page</h1>
</div>
)
}
export default Loginpage
์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ฃผ์ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์ Route
๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ํตํด ๋ผ์ฐํธ ์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
Route
์ปดํฌ๋ํธ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค.
<Route path="์ฃผ์๊ท์น" element={๋ณด์ฌ ์ค ์ปดํฌ๋ํธ JSX} />
import { useState } from 'react';
import './App.css';
import Homepage from './page/Homepage';
import Aboutpage from './page/Aboutpage';
import Productpage from './page/Productpage';
import ProductDetailPage from './page/ProductDetailPage';
import { BrowserRouter as Route, Routes, Navigate} from "react-router-dom";
import Loginpage from './page/Loginpage';
import Userpage from './page/Userpage';
function App() {
const [authenticate, setAuthenticate] = useState(true);
const PrivateRoute = () =>{
return authenticate == true?<Userpage/> : <Navigate to="/login" />
}
return (
<div>
<Routes>
<Route path="/" element={<Homepage />} /> {/*path ๊ฐ ํ์ด์ง ์ฃผ์ elemnet ๊ทธ ์ฃผ์์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ ํ์ด์ง */}
<Route path="/about" element={<Aboutpage />} />
<Route path="/products" element={<Productpage />} />
<Route path="/products/:id" element={<ProductDetailPage />} />
<Route path="/login" element={<Loginpage />} />
<Route path='/user' element={<PrivateRoute />} />
</Routes>
</div>
);
}
export default App;
์ด๋ฒ์๋ Link
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๋ ๋งํฌ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ ์น ํ์ด์ง์์๋ ์๋ ๋งํฌ๋ฅผ ๋ณด์ฌ์ค ๋ a
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ฆฌ์กํธ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์์ a
ํ๊ทธ๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ๋ฉด ์๋๋ค. ์๋ํ๋ฉด, a
ํ๊ทธ๋ฅผ ํด๋ฆญํ์ฌ ํ์ด์ง๋ฅผ ์ด๋ํ ๋ ๋ธ๋ผ์ฐ์ ์์๋ ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
Navigate
๋ Link
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋์ ํด์ผ ํ๋ ์ํฉ์ ์ฌ์ฉํ๋ Hook ์
๋๋ค.
<Link to="๊ฒฝ๋ก">๋งํฌ ์ด๋ฆ</Link>
import React from 'react'
import { Link, useNavigate } from 'react-router-dom'
const Homepage = () => {
const navigate =useNavigate();
const goProductPage=()=>{
navigate("/products?q=pants") // ?์ฟผ๋ฆฌ ๋ค์ ์๋ ๊ฐ์ url ๊ฒฝ๋ก์ ์ํฅ์ ๋ฏธ์น์ง ์์ ์ ํ์ ์ธ ์ ๋ณด์.
}
return (
<div>
<h1>Homepage</h1>
<Link to="/about">Go to about page</Link>
<button onClick={goProductPage}>Go to Product page</button>
</div>
)
}
export default Homepage
์ฌ์ดํธ๋ฅผ ํด๋ฆญํ ๋ ๋ง๋ค ์๋ฒ์ ๋ค๋ฅธ ๋์์ผ๋ก ์ด๋ํ๋๋ก ์์ฒญํ๋ค. ์์ฒญ์ ๋ฐ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฌด์์ ๋ค์ ๋ณด๋ผ์ง ๊ฒฐ์ ํ๋ค.
์์ฑ, ์ฝ๊ธฐ, ์ ๋ฐ์ดํธ ๋ฐ ์ญ์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค ๊ฐ์ง ๊ธฐ๋ณธ ๊ธฐ๋ฅ ์ ํ์ด๋ค.
๋ฆฌ์กํธ์์ ๋ผ์ฐํฐ ์ฌ์ฉ ์ ํ๋ผ๋ฏธํฐ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ํ์ฉํ๊ณ ์ถ๋ค๋ฉด useParams๋ผ๋ ํ ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
import React from 'react'
import { useParams } from 'react-router-dom'
const ProductDetailPage = () => {
const{id} = useParams(); //url์ ํ๋ฆฌ๋ฐํฐ๊ฐ์ ์ฝ์ด์ค๋ ํจ์.
return (
<div>
<h1>Show Product Detail{id}</h1>
</div>
)
}
export default ProductDetailPage