
ํ๋ก ํธ์๋์์ API์ ํต์ ํ๋ ์ผ์ ๋งค์ฐ ํํ์ง๋ง, ์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ์ํด ๊ตฌ์กฐํ๋ ํ๋ฆ์ด ์ค์ํ๋ค. ์ค๋์ React ํ๋ก์ ํธ์์ API ํต์ ์ ์ด๋ป๊ฒ ๋ชจ๋ํํ๋ฉด ์ข์์ง, ๊ทธ๋ฆฌ๊ณ React์์ ๋ผ์ฐํ ์ ์ด๋ป๊ฒ ์ค์ ํ๋์ง๋ฅผ ์ ๋ฆฌํด๋ณธ๋ค.
View (Header.tsx)
โ
Hooks (useCategory.ts)
โ
Query Library (์: react-query, tanstack-query) [Optional]
โ
Fetcher (category.api.ts โ http.ts)
โ
API Server
src/
โโโ components/
โโโ hooks/
โ โโโ useCategory.ts
โโโ api/
โ โโโ category.api.ts
โ โโโ http.ts
โโโ pages/
View (Header.tsx)
โ UI์์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ์์์ . useCategory ๊ฐ์ ์ปค์คํ
ํ
์ ํธ์ถํ๋ค.
Hooks (useCategory.ts)
โ API ํธ์ถ ๋ก์ง์ ์บก์ํํ์ฌ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋ค. useEffect, useQuery ๋ฑ์ ํ์ฉ.
Fetcher (category.api.ts)
โ ํน์ API์ ๋ํ ์์ฒญ ๋ก์ง์ ๋ด๋นํ๋ค. ์์ฒญ ๊ฒฝ๋ก, ํ๋ผ๋ฏธํฐ, ์๋ต ํ์
์ง์ ๋ฑ์ ํฌํจ.
๊ณตํต Fetcher (http.ts)
โ axios ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ๊ธฐ๋ณธ ํค๋ ์ค์ , ์ธํฐ์
ํฐ ๋ฑ์ ์ค์ ํ๋ ๊ณตํต ๋ชจ๋.
// hooks/useCategory.ts
import { useEffect, useState } from "react";
import { getCategory } from "../api/category.api";
export const useCategory = () => {
const [data, setData] = useState(null);
useEffect(() => {
getCategory().then(setData);
}, []);
return data;
};
// api/category.api.ts
import { http } from './http';
export const getCategory = () => {
return http.get('/category');
};
// api/http.ts
import axios from 'axios';
export const http = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL,
headers: {
'Content-Type': 'application/json',
},
});
React Router๋ฅผ ํตํด SPA(single-page application)์์ ํ์ด์ง ์ ํ์ ๋งค๋๋ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
// App.tsx
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</BrowserRouter>
);
}
useNavigate()๋ก ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ด๋ ๊ฐ๋ฅ/post/:id) ๋ ์ฝ๊ฒ ์ค์ Nested Routes)๋ฅผ ํ์ฉํ๋ฉด ๋ ์ด์์ ๊ณต์ ๊ฐ ์ฌ์Outlet ์ปดํฌ๋ํธ๋ก ์์ ๋ผ์ฐํธ๋ฅผ ํ์BrowserRouter, Routes, Route๋ก ๊ตฌ์ฑํ๋ฉฐ, ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๋ผ์ฐํ
์ด ๊ฐ๋ฅํด ์ง๊ด์ ์ด๋ค.react-router-dom์ ๊ธฐ๋ฅ์ ์ ์ดํดํ๊ณ ํ์ฉํ๋ฉด ๋์ ๋ผ์ฐํ
๊ณผ ์ค์ฒฉ ๋ ์ด์์ ๊ตฌ์ฑ๋ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.