useLocation ํ ์ ์ฌ์ฉํ๋ ค๋๋ฐ ์๊พธ ์๋ฌ๊ฐ ๋๋ค๋ฉด, Router ์์น๋ฅผ ์์ฌํด๋ณด์ธ์!
React ํ๋ก์ ํธ์์ ๋ค์์ฒ๋ผ AppRouter ๋ด๋ถ์์ useLocation()์ ์ฌ์ฉํ๋ฉด์ Router๊น์ง ํจ๊ป ์ ์ธํ๋ ๊ฒฝ์ฐ:
import { Router, useLocation } from "react-router-dom";
const AppRouter = () => {
const location = useLocation(); // โ ์ฌ๊ธฐ์ ์๋ฌ ๋ฐ์!
return (
<Router>
{/* Routes ๊ตฌ์ฑ */}
</Router>
);
};
์ด๋ด ๋ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค:
โ
useLocation()must be used within a<Router>component
React Router์ ๋ชจ๋ ํ
๋ค (useLocation, useNavigate, useParams ๋ฑ)์ ๋ด๋ถ์ ์ผ๋ก Router Context๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
์ฆ, ์ด ํ
๋ค์ด ์ ์ ์๋ํ๋ ค๋ฉด ๋ฐ๋์ Router ์ปดํฌ๋ํธ ์๋(์์)์์ ํธ์ถ๋ผ์ผ ํด์.
import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";
import AppRouter from "./AppRouter";
const root = ReactDOM.createRoot(document.getElementById("root")!);
root.render(
<React.StrictMode>
<BrowserRouter>
<AppRouter />
</BrowserRouter>
</React.StrictMode>
);
import { Routes, Route, useLocation } from "react-router-dom";
import Header from "./components/common/Header";
import StudyRoomHeader from "./components/studyRoom/StudyRoomHeader";
import HomePage from "./pages/HomePage";
import StudyRoomPage from "./pages/StudyRoomPage";
const AppRouter = () => {
const location = useLocation();
const isStudyRoom = location.pathname.startsWith("/study-room");
return (
<>
{isStudyRoom ? <StudyRoomHeader /> : <Header />}
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/study-room" element={<StudyRoomPage />} />
</Routes>
</>
);
};
export default AppRouter;
โ๏ธ ๋ง์ต๋๋ค.
๋ง์ฝ AppRouter ๋ด๋ถ์์ useLocation()์ด๋ useNavigate(), useParams() ๊ฐ์ ํ
์ ์ ํ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด,
Router๋ฅผ AppRouter ์์ ๋๋๋ผ๋ ๊ธฐ์ ์ ์ผ๋ก๋ ์๋ฌ๊ฐ ๋์ง ์์ต๋๋ค.
ํ์ง๋ง ์ด๊ฑด ์ฐ์ฐํ ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ๋ฟ, ๋ค์๊ณผ ๊ฐ์ ๋จ์ ์ด ์์ต๋๋ค:
| ๋ฌธ์ | ์ค๋ช |
|---|---|
| โ ์์น ๋ถ์ ์ | ๋ผ์ฐํ ํ๊ฒฝ๊ณผ ๊ตฌ์กฐ๋ฅผ ํ ์ปดํฌ๋ํธ์ ์๊ฒ ๋จ |
| โ ์ ์ง๋ณด์ ์ด๋ ค์ | ์ถํ useLocation ์ฌ์ฉ ์ ๋ค์ ๊ตฌ์กฐ ๋ณ๊ฒฝํด์ผ ํจ |
| โ ์ปจํ ์คํธ ์ค์ฒฉ ์ค๋ฅ | ์ค์ฒฉ๋ Router๋ ๋ฏธ๋ฌํ ๋ฒ๊ทธ ์ ๋ฐ ๊ฐ๋ฅ |
| ์ฅ์ | ์ค๋ช |
|---|---|
| โ ์์ ์ฑ | ๋ชจ๋ ๋ผ์ฐํฐ ํ ๋ค์ด ์์ ํ๊ฒ ์๋ |
| โ ์ญํ ๋ถ๋ฆฌ | index.tsx โ ํ๊ฒฝ ์ ๊ณต, AppRouter.tsx โ ๊ฒฝ๋ก ๊ตฌ์ฑ |
| โ ํ์ฅ์ฑ | ์ดํ Layout, AuthRoute ์ถ๊ฐํ๊ธฐ ์ฌ์ |
| โ ์์ธก ๊ฐ๋ฅ | ๋์ ์์น๊ฐ ๋ช ํํ๋ฏ๋ก ๋๋ฒ๊น ์ด ์ฌ์ |
| ์ํฉ | Router ์์น | ์ค๋ช |
|---|---|---|
useLocation() ์ฌ์ฉํจ | index.tsx (์ต์๋จ) | ๋ฐ๋์ ํ์ |
| ์๋ฌด ํ ๋ ์ฌ์ฉ ์ ํจ | ๋ด๋ถ์ ๋ฌ๋ ์๋ฌ ์์ | ๊ทธ๋ฌ๋ ๋น์ถ์ฒ |
โHook์ ์ฐ๋ ค๋ฉด, ๊ทธ Hook์ ์ธ์ํ ์ ์๋ ํ๊ฒฝ ์์ ์์ด์ผ ํ๋ค.โ
React Router์ ํ
์ ์ฐ๊ณ ์ถ๋ค๋ฉด ๋ฐ๋์ Router๋ ์ปดํฌ๋ํธ ์ธ๋ถ, ๋ณดํต์ index.tsx์ ์์นํด์ผ ํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ํ
์ ์๋ํ์ง ์๊ฑฐ๋ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ ์ฐ๋๋ผ๋ ๋ฏธ๋๋ฅผ ์๊ฐํด ๊ตฌ์กฐ๋ฅผ ๋๋ ๋๋ ๊ฒ์ด ๋ ์ข์ ์ ํ์
๋๋ค. ๐ฑ