ํ์ด์ง๋ ๋๊ฐ์๋ฐ, ์์์ ๋ ๋๋๋ ๋ฐ์ดํฐ๋ง ๋ค๋ฅธ ํ์ด์ง๋ค ์์ฃ !
์๋ฅผ ๋ค์ด, ์ ํ๋ธ์ ๊ฐ ์์ ์์ธํ์ด์ง๊ฐ ์๊ฒ ๋ค์. ๐คฉ
์ด๋ ๊ฒ Routes์ ๊ฒฝ๋ก(URL)์ ํน์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฃ์ด์ ํด๋น ํ์ด์ง๋ก ์ด๋ํ ์ ์๊ฒ ํ๋ ๊ฑฐ์ฃ .
์ ๊ฐ ๊ตฌํํ ๋ฐฉ๋ฒ์ ์์ฑํ๊ฒ ์ต๋๋ค.
์ฐ์ ์์๋ ์ด๋ ๊ฒ ๋ฉ๋๋ค.
- url์ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅด๊ฒ ๋ ๋๋ ํ์ด์ง(A) ๊ตฌํ
- (A)๋ก ๊ฐ ์ ์๋๋ก <Route path = "์ฃผ์/:id" component={(A)} /> ์ถ๊ฐ
- ํ์ด์ง(B)์์ ๋ฐ์ดํฐ์ id๋ฅผ ๋งค๊ฐ๋ณ์๋ก useNavigate ์ฌ์ฉํ์ฌ (A)๋ก ์ด๋
- (A)์ ํ์ฌ url์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฝ์์ ๋ฐ์ดํฐ GET ์์ฒญ ๋ณด๋ด๊ธฐ
00. ๋ ๋ํ ํ์ด์ง ๊ตฌํ
A.js
import * as React from "react";
export default function A() {
return (
<div>
<h1>(A) ํ์ด์ง</h1>
</div>
);
}
Router.js
import { BrowserRouter, Routes, Route } from "react-router-dom";
import A from "./A";
const AppRouter = () => {
return (
<BrowserRouter>
<Routes>
<Route path="a/:id" element={<A />} />
</Routes>
</BrowserRouter>
);
};
export default AppRouter;
๊ฐ๋จํ๊ฒ ์ฐ์ ! a ์์ ๋ ๋๋๋๋ก ํ๊ณ , id์ ๋ฐ๋ผ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ํ์ด์ง๊ฐ ๋ ๋ ๋๋๋ก url์ ์ค์ ํ์ต๋๋ค.
: ๋ ๋ค์ ๋ณ์๊ฐ ์ฌ ๊ฒ์ด๋ค! ๋ผ๊ณ ํ๊ธฐํ๋ ๊ฒ๋๋ค.
: ๋ค์ ์์์ ๋ณ์๋ฅผ ์์ฑํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ์ ๋ id๋ก ํ์ต๋๋ค ๐คฉ๐คฉ
01. ๋ฐ์ดํฐ์ id๋ฅผ ๋งค๊ฐ๋ณ์๋ก useNavigate ์ฌ์ฉํ์ฌ ํ์ด์ง ์ด๋
import * as React from "react";
import { useNavigate } from "react-router-dom";
export default function B() {
/** ํ์ด์ง ์ด๋ hook */
const navigate = useNavigate();
/** ํด์ฆ ํ์ด์ง๋ก */
function handlePage() {
navigate(`/a/${id}`);
}
return (
<div>
<h1>(B) ํ์ด์ง</h1>
<button onClick={handlePage}>A๋ก ๊ฐ๊ธฐ</button>
</div>
);
}
โจโจโจ handlePage์ ์๋ navigate ์ url์ด ์ค์ํฉ๋๋ค!!โจโจโจ
๊ทธ๋ฌ๋๊น, ๋งค๊ฐ๋ณ์ url ์ค์ ์ ์์ ์ด ๋ณด๋ด๋ ค๋ ์ฃผ์์ ๋ง๊ฒ ์ ์ค์ ํด์ฃผ์๊ธธ ๋ฐ๋๋๋ค!
์๋ฅผ ๋ค์ด, ์๋๋ id๊ฐ 1์ธ A ํ์ด์ง์ ๋๋ค.
1. ํ์ฌ ํ์ด์ง๋ฅผ ์์๋ก ๋งค๊ฐ๋ณ์๋ฅผ ๋ณด๋ด url ๋ ๋(ํ์ฌ B ํ์ด์ง์์ ๋ ๋ -> /b/a/1)
2. ํ์ฌ ํ์ด์ง์ ์๊ด์์ด ๋งค๊ฐ๋ณ์๋ฅผ ๋ณด๋ด ๋ ๋ํ ํ์ด์งurl ๋ ๋(ํ์ฌ B ํ์ด์ง ์๊ด x -> /a/1)
02. ํ์ฌ url์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฝ์๋ด๊ธฐ
์๋ฅผ ๋ค์ด, ๋งค๊ฐ๋ณ์ 1์ ๊ฐ์ง๊ณ A ํ์ด์ง๋ก ์๋ค๊ณ ํฉ์๋ค!
๊ทธ๋ ๋ค๋ฉด, ํ์ฌ ํ์ด์ง์ url์ /a/1 ์ด๋ค์!
1์ ์๊น Route์์ ์ค์ ํ <Route path="a/:id" element={<A />} />์ ๋งค๊ฐ๋ณ์ ์๋ฆฌ์ ์ ๋ค์ด์๋ค์!
import { useParams } from "react-router-dom";
const { id } = useParams();
useParams๋ ํ์ฌ URL์ ํฌํจ๋์ด์๋ Key, Value ํ์์ ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ์์ ๊ฐ์ด ํด์ url์ ์๋ 1์ ๋ฝ์๋ผ ์ ์์ต๋๋ค!!
{ id }๋ Route์์ ์ค์ ํ ์์์ ๋ณ์ ์ด๋ฆ์ด์ฃ ! โบ๏ธโบ๏ธ
03. ๋งค๊ฐ๋ณ์ ์ฌ์ฉํด์ ๋ฐ์ดํฐ GET ์์ฒญ ๋ณด๋ด๊ธฐ
import * as React from "react";
import { useParams } from "react-router-dom";
export default function A() {
const { id } = useParams();
/** API */
async function loadData() {
/** get param */
let params = {
id: id
};
await APIํจ์๋ช
(params).then((res) => {
console.log(res);
});
}
return (
<div>
<h1>(A) ํ์ด์ง</h1>
</div>
);
}
์ด๋ ๊ฒ ํด์, get ์์ฒญ APIํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋ณด๋ด์ค์๋ค.
import axios from "axios";
/** get API */
async function APIํจ์๋ช
(params = {}) {
let data;
try {
await axios
.get(`API์์ฒญ์ฃผ์/${params.id}`)
.then((response) => {
// console.log(response);
data = response.data;
});
return data;
} catch (error) {
...
}
}
export default APIํจ์๋ช
;
API ์์ฒญ์ ๋ณด๋ผ ์ฃผ์์ ๋ณ์๋ฅผ ์ฝ์ ํด์ค๋๋ค.
๊ทธ๋ผ,, ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ผ์ค ์ ์์ผ๋ฆฌ๋ผ,, ๋ฏฟ์ต๋๋ค!
ํ์ดํ ๐๐