⭐ 공식문서 확인
→ https://reactrouter.com/
① 터미널에 npm install react-router-dom@6 입력
② src/index.js 파일에 BrowserRouter를 import한 후 App을 감싸준다.
// index.js
import * as React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
import { BrowserRouter } from "react-router-dom";
const root = ReactDOM.createRoot(
document.getElementById("root")
);
root.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>
);
// App.js
import { Routes, Route } from 'react-router-dom';
function App(){
return(
<>
<Routes>
<Route path="/" element={ <Home /> } /> // 메인페이지
<Route path="/About" element={ <About /> } /> // About페이지
</Routes>
</>
)
}
export default App;
<Route path="/url경로" element={ <보여줄HTML> } />
을 적어준다.// App.js
import { Link } from 'react-router-dom';
function App(){
return(
<>
<ul>
<li>
<Link to="/">HOME</Link>
</li>
<li>
<Link to="/About">ABOUT</Link>
</li>
</ul>
<Routes>
<Route path="/" element={ <Home /> } />
<Route path="/About" element={ <About /> } />
</Routes>
</>
)
}
export default App;
// App.js
import { Routes, Route, Outlet } from 'react-router-dom';
import About from './About';
import AboutLocation from './AboutLocation';
import AboutHistory from './AboutHistory';
function App(){
return(
<>
<Routes>
<Route path="/About" element={ <About /> }>
<Route path="location" element={ <AboutLocation /> } />
// path="/About/location" 와 같음
<Route path="history" element={ <AboutHistory /> } />
// path="/About/history" 와 같음
</Route>
</Routes>
</>
)
}
export default App;
function About(){
return(
<>
<h1>About 페이지 입니다</h1>
<Outlet />
</>
)
}
export default About;
<AboutLocation>와 <AboutHistory>
를 렌더링하려면 부모요소에서 <Outlet />
의 자리에 들어간다고 생각하면 된다.⭐ nested routes
→ 쉽게 생각하면 Route안에 Route를 사용하는 것이다.
→ 위와 아래는 같은 뜻 이다.// App.js <> <Route path="/About" element={ <About /> } /> <Route path="/About/location" element={ <AboutLocation /> } /> <Route path="/About/history" element={ <AboutHistory /> } /> </> <> <Route path="/About" element={ <About /> }> <Route path="location" element={ <AboutLocation /> } /> <Route path="history" element={ <AboutHistory /> } /> </Route> </>
// App.js
import { useNavigate } from 'react-router-dom';
function App(){
let navigate = useNavigate();
return(
<>
<button onClick={ ()=>{ navigate(-1) } }>한번뒤로이동</button>
<button onClick={ ()=>{ navigate(2) } }>앞으로두번이동</button>
<button onClick={ ()=>{ navigate('/') } }>메인페이지로이동</button>
</>
)
}
export default App;
navigate(to, { replace: true })
navigate(to, { state })
/* 예시) /ProductList/Product/0일 경우 첫 번째 상품을 보여주고,
/ProductList/Product/1일 경우 두 번째 상품을 보여준다. */
// App.js
import { Routes, Route, useParams } from 'react-router-dom';
function App(){
reutnr(
<>
<Routes>
<Route path="/ProductList">
<Route path="Product/:userId" element={ <Product /> } />
</Route>
</Routes>
</>
)
}
export default App;
// Product.js
function Product(){
// URL로 부터 userId 매개변수를 가져온다.
let { userId } = useParams();
// ...
}
Route path=":userId"
의 동적 매개변수의 key/value 를 반환한다.