ํฐ์คํ ๋ฆฌ ๋ทฐ
[React] Router๋ฅผ ์ฌ์ฉํด ํ์ด์ง ์ด๋ํ๊ธฐ!
stable_sound 2023. 4. 27. 12:04
React์์์ ํ์ด์ง์ด๋
๋ผ์ฐํ ?๐ค
์ฌ์ฉ์๊ฐ ์์ฒญํ URL์ ๋ฐ๋ผ ์๋ง๋ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ.
์์
๐ ์ผํ๋ชฐ ํ์ด์ง๋ฅผ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ์ ๋, ์ด๋ค ํ์ด์ง๋ค์ด ํ์ํ ๊น?
- ์ํ ๋ชฉ๋ก ํ์ด์ง
- ์ํ ์์ธ ํ์ด์ง
- ์ฅ๋ฐ๊ตฌ๋ ํ์ด์ง
- ๋ง์ด ํ์ด์ง
... ๋ฑ
์ด์ฒ๋ผ ์ฌ๋ฌ ํ์ด์ง๋ก ๊ตฌ์ฑ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋ ํ์ด์ง๋ณ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๋ฉด์ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ์ํ ๊ฒ์ด ๋ผ์ฐํ ์์คํ ์ด๋ค.
โ๏ธ ์ค์น
npm install react-router-dom
Router
ํ๋ก์ ํธ์ ๋ผ์ฐํฐ๋ฅผ ์ ์ฉํ ๋์๋ src/index.js
ํ์ผ์์ react-router-dom์ ๋ด์ฅ๋์ด ์๋ BrowserRouter
๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด App
์ ๊ฐ์ธ์ค๋ค.BrowserRouter
์ ๊ฒฝ์ฐ, Link ํ๊ทธ๋ฅผ ์ฌ์ฉํด URL์ ์ด๋ํ๊ณ HTML5์ History API๋ฅผ ์ฌ์ฉํด ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค์ง ์๊ณ ๋ ๋จ์ํ ์ฃผ์๋ง ๋ฐ๊ฟ์ฃผ๋ฉฐ ์ปดํฌ๋ํธ๋ค์ ๋ ๋๋งํด์ค๋ค.
src/index.js
import { createRoot } from "react-dom/client";
import App from "./App";
import { BrowserRouter } from "react-router-dom";
const container = document.getElementById("root");
const root = createRoot(container);
root.render(
<BrowserRouter>
<App />
</BrowserRouter>
);
Routes์ Route
ํ์ด์ง๋ก ์ฌ์ฉํ ์ปดํฌ๋ํธ๋ค์ ์์ฑํ ํ, ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ฃผ์ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์ํ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์ Route
๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ํตํด ๋ผ์ฐํธ ์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
์ด๋, Route
๋ Routes
์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ฌ์ฉ๋์ด์ผ ํ๋ค.Routes
๋ ์ฌ๋ฌ Route๋ฅผ ๊ฐ์ธ์ ๊ทธ ์ค ๊ท์น์ด ์ผ์นํ๋ ๋ผ์ฐํธ ํ๋๋ง์ ๋ ๋๋ง ์์ผ์ฃผ๋ ์ญํ ์ ํ๋ค.Route
๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค.
<Route path="๊ฒฝ๋ก ๊ท์น" element={๋ณด์ฌ์ค ์ปดํฌ๋ํธ๋ช
} />
๐ก v5 โก๏ธ v6 ์ ๋ฐ์ดํธ ์ฌํญ
- exact ํค์๋ ์ญ์
- Swich โก๏ธ Routes ๋ก ๋ณ๊ฒฝ
- component โก๏ธ element ๋ก ๋ณ๊ฒฝ
src/App.js
import { Route, Routes } from "react-router-dom";
import { Header } from "./Components/Header/Header";
import { Home } from "./Components/Home";
import { About } from "./Components/About";
import { Record } from "./Components/Record";
import { Articles } from "./Components/Articles";
function App() {
return (
<div>
<Header />
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/record" element={<Record />} />
<Route path="/articles" element={<Articles />} />
</Routes>
</div>
);
}
export default App;
Link ์ปดํฌ๋ํธ
<Link>
๋ HTML์ <a>
ํ๊ทธ ์ฒ๋ผ ์ฌ์ฉ์๊ฐ ํด๋ฆญํ๊ฑฐ๋ ํญ์ ํตํด ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ ์ ์๊ฒ ํด์ฃผ๋ ์์์ด๋ค.
๋ฆฌ์กํธ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์์ <a>
ํ๊ทธ๋ ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ฉด ์๋๊ณ Link
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
Link
์ปดํฌ๋ํธ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค.
<Link to="๊ฒฝ๋ก">๋งํฌ ์ด๋ฆ</Link>
src/Components/Header.jsx
import React from "react";
import { Link } from "react-router-dom";
import "./style.css";
export const Header = () => {
return (
<>
<header>
<h1>
<Link to="/">ํ</Link>
</h1>
<ul>
<li>
<Link to="/about">about me</Link>
</li>
<li>
<Link to="/record">์ด๋ ฅ</Link>
</li>
<li>
<Link to="/articles">ํฌํธํด๋ฆฌ์ค</Link>
</li>
</ul>
</header>
</>
);
};
๊ฒฐ๊ณผ

์ค์ฒฉ ๋ผ์ฐํธ
์์์ ์ผํ๋ชฐ ํ์ด์ง๋ ์ํ ๋ชฉ๋ก ํ์ด์ง์ ์ํ ์์ธ ํ์ด์ง๊ฐ ์๋ค๊ณ ํ์๋ค.
๊ฒฝ๋ก๋ฅผ ์์๋ก ์์ฑํด๋ณด๋ฉด /product
์ /product/1
์ ํํ๊ฐ ๋์ด์ผ ํ ํ
๋ฐ ์ด๊ฑด ์ด๋ป๊ฒ ํ ์ ์์๊น?
src/App.js
import { Route, Routes } from "react-router-dom";
import { Header } from "./Components/Header/Header";
import { Home } from "./Components/Home";
import { About } from "./Components/About";
import { Record } from "./Components/Record";
import { Articles } from "./Components/Articles";
import { Article } from "./Components/Article";
function App() {
return (
<div>
<Header />
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/record" element={<Record />} />
<Route path="/articles" element={<Articles />} />
<Route path="/articles/:id" element={<Article />} /> // โญ๏ธ ์ด ๋ถ๋ถ์ ์ถ๊ฐ!
</Routes>
</div>
);
}
export default App;
App.js์์ ๋ผ์ฐํธ๋ฅผ ์ถ๊ฐํ๋๋ฐ, ์ด๋ path ๋ถ๋ถ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ํด์ค๋ค.
src/Components/Articles.jsx
import React from "react";
import { Link } from "react-router-dom";
export const Articles = () => {
return (
<div>
<h2>ํฌํธํด๋ฆฌ์ค</h2>
<ul>
<li>
<Link to="/articles/1">ํฌํธํด๋ฆฌ์ค 1</Link>
</li>
<li>
<Link to="/articles/2">ํฌํธํด๋ฆฌ์ค 2</Link>
</li>
<li>
<Link to="/articles/3">ํฌํธํด๋ฆฌ์ค 3</Link>
</li>
</ul>
</div>
);
};
src/Components/Article.jsx
import React from "react";
import { useNavigate, useParams } from "react-router-dom";
export const Article = () => {
const { id } = useParams();
const navigate = useNavigate();
const goBack = () => {
navigate(-1);
};
return (
<div>
<button onClick={goBack}>๋ค๋ก๊ฐ๊ธฐ</button>
<p>Article {id}</p>
</div>
);
};
๊ฒฐ๊ณผ

๋ง์ฝ, ๊ฐ๊ฐ์ ํฌํธํด๋ฆฌ์ค ํ์ด์ง์์ ํฌํธํด๋ฆฌ์ค ๋ชฉ๋ก์ ๋ณด์ฌ์ค์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
๊ฒ์ํ์์๋ ๊ฒ์๋ฌผ์ ๋ค ๋ณด๊ณ ์คํฌ๋กค์ ๋ฐ์ผ๋ก ๋ด๋ ค๋ณด๋ฉด ๊ฒ์๋ฌผ ๋ชฉ๋ก์ด ๋์ค๋ ๊ฒฝ์ฐ๊ฐ ์ข
์ข
์๋๋ฐ ๊ทธ๋ฐ๊ฑด ์ด๋ป๊ฒ ํด์ผํ๋์ง๋ ์์๋ณด์!
src/App.js
import { Route, Routes } from "react-router-dom";
import { Header } from "./Components/Header/Header";
import { Home } from "./Components/Home";
import { About } from "./Components/About";
import { Record } from "./Components/Record";
import { Articles } from "./Components/Articles";
import { Article } from "./Components/Article";
function App() {
return (
<div>
<Header />
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/record" element={<Record />} />
<Route path="/articles" element={<Articles />}>
<Route path=":id" element={<Article />} />
</Route> // โญ๏ธ ์ฝ๋ ๋ณ๊ฒฝ!
</Routes>
</div>
);
}
export default App;
articles ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง ๋ผ์ฐํธ๋ก ํ๋ผ๋ฏธํฐ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง ๋ผ์ฐํธ๋ฅผ ๊ฐ์ธ์ค๋ค. ์ฆ, ํ๋ผ๋ฏธํฐ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง ๋ผ์ฐํธ๋ฅผ children์ผ๋ก ๋ง๋ค์ด์ค๋ค.
src/Components/Articles.jsx
import React from "react";
import { Link, Outlet } from "react-router-dom";
export const Articles = () => {
return (
<div>
<h2>ํฌํธํด๋ฆฌ์ค ๋ชฉ๋ก</h2>
<Outlet /> // โญ๏ธ ์ถ๊ฐ!
<ul>
<li>
<Link to="/articles/1">ํฌํธํด๋ฆฌ์ค 1</Link>
</li>
<li>
<Link to="/articles/2">ํฌํธํด๋ฆฌ์ค 2</Link>
</li>
<li>
<Link to="/articles/3">ํฌํธํด๋ฆฌ์ค 3</Link>
</li>
</ul>
</div>
);
};
๋ชฉ๋ก์ด ๋ ์ปดํฌ๋ํธ ์์์ <Outlet>
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด์ค๋ค.<Outlet>
๋ Route
์ children์ผ๋ก ๋ค์ด๊ฐ๋ JSX ์๋ฆฌ๋จผํธ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ญํ ์ด๋ค.
๊ทธ๋ผ <h2>ํฌํธํด๋ฆฌ์ค ๋ชฉ๋ก</h2>
๋ฐ์๋
<Route path=":id" element={<Article />} />
ํํ๋ฅผ ๊ฐ์ง ์๋ฆฌ๋จผํธ๊ฐ ๋ณด์ฌ์ง๊ฒ๋๊ณ ๊ทธ ๋ฐ์ Articles์ ํด๋นํ๋ ๋ชฉ๋ก์ด ๋ณด์ฌ์ง ๊ฒ์ด๋ค.
๊ฒฐ๊ณผ

๐ ์ฐธ๊ณ
'Front-end ๐ฅ๐ค > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] CheckBox ํด๋ฆญ ์ ํ ์ด๋ธ ํ์ ์ ํํจ๊ณผ๋ฅผ ์ฃผ์! (0) | 2023.04.28 |
---|---|
[React] ๊ฐ๋จํ TodoList ๋ง๋ค๊ธฐ ๐ (0) | 2023.04.28 |
[React] JavaScript๋ก ๋ง๋ ํ๋ก์ ํธ ๋ฆฌํฉํ ๋ง ํ๊ธฐ 1 (0) | 2023.03.13 |
[React Query] useInfiniteQuery์ useInView๋ก ๊ฒ์๋ฌผ ๋ฌดํ์คํฌ๋กค ๊ตฌํํ๊ธฐ (4) | 2023.02.28 |
React-Slick์ผ๋ก ์ฌ๋ผ์ด๋๋ฅผ ๋ง๋ค์ด๋ณด์! (0) | 2023.02.26 |
- Total
- Today
- Yesterday
- ํํ์ด์ง ๋ง๋ค๊ธฐ
- ๋ฐฑ์ค
- ๋ธ๋ก์ฒด์ธ
- JavaScript
- php ๋ฌ๋ ฅ๋ง๋ค๊ธฐ ์์ฉ
- C์ธ์ด
- CSS
- ์ ์ฒ๊ธฐ ์ค๊ธฐ ์ ๋ฆฌ
- ํ๋ก๊ทธ๋๋จธ์ค
- ์กธ์ ์ํ์ค๋น
- ํ์ฅ์ค์ต ๊ธฐ๋ก
- css grid
- ๋ฆฌ์กํธ
- indexOf()
- ๊ฐค๋ฌ๋ฆฌ๋์ฐ๊ธฐ
- ๋ ธ๋ง๋์ฝ๋
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ
- ์ด๋๋ฆฌ์
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ์ค๊ธฐ
- ํ์ฅ์ค์ต
- ์ ์ฒ๊ธฐ ์ค๊ธฐ
- MySQL
- HTML
- ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ์ค๊ธฐ ์ ๋ฆฌ
- ์กธ์ ์ํ
- ์ค๋งํธ์ปจํธ๋ํธ
- DAPP
- php
- php๊ฒ์ํ๋ง๋ค๊ธฐ
- set ๊ฐ์ฒด
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |