๋ก๊ทธ์ธ ์ํ์ ๋ฐ๋ผ ์ ๊ทผ ์ ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์ ํ๋ค.
X ๋ก๊ทธ์ธ ๋์ง ์์ ์ํ์์ ์ ๊ทผ ๊ฐ๋ฅํ ํ์ด์ง
: ์์ ํ์ด์ง, ๋ก๊ทธ์ธ ํ์ด์ง, ๋ก๋ฉ ํ์ด์ง, ๋น ํ์ด์ง
O ๋ก๊ทธ์ธ ๋ ์ํ์์ ์ ๊ทผ ๊ฐ๋ฅํ ํ์ด์ง
: ๋๋จธ์ง ๋ชจ๋ ํ์ด์ง
+ ์ง์ ๋์ง ์์ route์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ์๋ ๋ฐ๋ก ๋์์ธํ empty page๊ฐ ๋จ๋๋ก ์ค์
๋ก๊ทธ์ธ ์์ localstorage์ access token์ ์ ์ฅํ๋๋ก ์ค์ ํด๋์๊ธฐ ๋๋ฌธ์ ๋ง์ฝ localstorage์ ํ ํฐ์ด ์๋ค๋ฉด ๋ก๊ทธ์ธ์ด ๋์ด ์๋ ๊ฒ์ด๊ณ ์๋ค๋ฉด ๋ก๊ทธ์ธ์ด ๋์ด ์์ง ์์ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ํ ํฐ ์ ์ฅ ์ฌ๋ถ๋ฅผ ํตํด ๋ก๊ทธ์ธ์ด ๋์ด์๋์ง ํ์ธํด์ค๋ค.
๋ก๊ทธ์ธ์ด ๋์ด ์์ ๊ฒฝ์ฐ Outlet
์ ์ด์ฉํด ์ง์ ํ ๋ผ์ฐํธ๋ค์ ๋ ๋๋ง ํด์ฃผ๊ณ , ๋ก๊ทธ์ธ์ด ๋์ด ์์ง ์์ ๊ฒฝ์ฐ ๋ก๊ทธ์ธ์ ํ๋๋ก ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋ ์ํจ๋ค.
์ฐธ๊ณ |
Outlet
์ด๋?react-router-dom์
Outlet
์ React Router v6์์ ๋์ ๋ ๊ธฐ๋ฅ์ด๋ค. ์ด์ ๋ฒ์ ์ React Router์์๋ Route ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ผ์ฐํ ์ ๊ด๋ฆฌํ์ง๋ง, v6์์๋ ๋ ์ ์ฐํ๊ณ ์ค์ฒฉ๋ ๋ผ์ฐํ ๊ตฌ์กฐ๋ฅผ ์ํด Outlet์ด๋ผ๋ ์๋ก์ด ๊ฐ๋ ์ด ๋์ ๋์๋ค.
Outlet์ ๋ถ๋ชจ ๋ผ์ฐํธ์ ์์ ์ปดํฌ๋ํธ ๋ด์์ ๋ ๋๋ง๋๋ ์ปดํฌ๋ํธ๋ฅผ ํ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ฒฉ๋ ๋ผ์ฐํ ์ ๋ค๋ฃจ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์ด๋ค. ๋ถ๋ชจ ๋ผ์ฐํธ๊ฐ ์์ ๋ผ์ฐํธ๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ, Outlet์ ๊ทธ ์์ ๋ผ์ฐํธ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋๋งํ๋ ์ญํ ์ ํ๋ค.
์ด๋ค route์๋ ํด๋นํ์ง ์๋ ์ฃผ์๋ก ์ด๋ํ์ ์์๋ ๋ฐ๋ก ๋์์ธํ empty page๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก Routes์ ๋ง์ง๋ง์ <Route path="*" element={<Empty />} />
๋ฅผ ์ถ๊ฐํด์ค๋ค.
PrivateRoute.js
import { Navigate, Outlet } from "react-router-dom";
const isLogin = !!localStorage.getItem("bagtoken");
const PrivateRoute = () => {
return isLogin ? <Outlet /> : <Navigate to="/login" />;
};
export default PrivateRoute;
App.js
import { Routes, Route } from "react-router-dom";
import GoogleLogin from "./pages/GoogleLoginPage";
import Nickname from "./pages/NicknamePage";
import ChatListPage from "./pages/ChatListPage";
import ChatRoomPage from "./pages/ChatRoomPage";
import Loading from "./pages/LoadingPage";
import DetailPage from "./pages/DetailPage";
import CreateSalesPage from "./pages/CreateSalesPage";
import ModifySalesPage from "./pages/ModifySalesPage";
import ItemListPage from "./pages/ItemListPage";
import FavoritesPage from "./pages/FavoritesPage";
import MyPage from "./pages/MyPage";
import Start from "./pages/Start";
import Purchase from "./pages/Purchase";
import Empty from "./pages/EmptyPage";
import PrivateRoute from "./components/Route/PrivateRoute";
function App() {
return (
<Routes>
<Route path="/" element={<Start />} />
<Route path="/login" element={<GoogleLogin />} />
<Route path="/loading" element={<Loading />} />
{/* ๋ก๊ทธ์ธ ํด์ผ ์ ๊ทผ ๊ฐ๋ฅํ ํ์ด์ง */}
<Route element={<PrivateRoute />}>
<Route path="/nickname" element={<Nickname />} />
<Route path="/home" element={<ItemListPage />} />
<Route path="/favorites" element={<FavoritesPage />} />
<Route path="/chats" element={<ChatListPage />} />
<Route path="/chats/:roomId" element={<ChatRoomPage />} />
<Route path="/detail/:postId" element={<DetailPage />} />
<Route path="/create" element={<CreateSalesPage />} />
<Route path="/modify/:postId" element={<ModifySalesPage />} />
<Route path="/mypage" element={<MyPage />} />
<Route path="/deal" element={<Purchase />} />
<Route path="/" element={<Start />} />
</Route>
{/* ๋น ํ์ด์ง */}
<Route path="*" element={<Empty />} />
</Routes>
);
}
export default App;