React
접근 제한 라우팅 구현
재키재키
2022. 3. 5. 18:03
1. PrivateRouter, PublicRouter 를 이용한 구현
- PrivateRouter, PublicRouter
function PrivateLoginRoute({ children }) {
return isLogin() ? children : <Navigate to="/login" />;
}
function PublicRoute({ children }) {
return isLogin() ? <Navigate to="/main" /> : children;
}
- index.jsx
<BrowserRouter>
<Reset />
<Routes>
<Route path="/" element={<IndexPage />} />
<Route path="/login" element={<LoginPage />} />
<Route path="/main" element={<MainPage />} />
<Route
path="/"
element={
<PublicRoute>
<IndexPage />
</PublicRoute>
}
/>
<Route
path="/login"
element={
<PublicRoute>
<LoginPage />
</PublicRoute>
}
/>
<Route
path="/main"
element={
<PrivateIndexRoute>
<MainPage />
</PrivateIndexRoute>
}
/>
<Route path="/main/:search" element={<MainPage />} />
<Route path="/mypage" element={<MyPage />} />
<Route
path="/mypage"
element={
<PrivateLoginRoute>
<MyPage />
</PrivateLoginRoute>
}
/>
<Route path="/parties/:id" element={<PartyPage />} />
<Route path="/my-party" element={<MyPartyPage />} />
<Route path="/chats/:id" element={<ChatPage />} />
<Route path="/newparty" element={<NewPartyPage />} />
<Route
path="/my-party"
element={
<PrivateLoginRoute>
<MyPartyPage />
</PrivateLoginRoute>
}
/>
<Route
path="/chats/:id"
element={
<PrivateLoginRoute>
<ChatPage />
</PrivateLoginRoute>
}
/>
<Route
path="/newparty"
element={
<PrivateLoginRoute>
<NewPartyPage />
</PrivateLoginRoute>
}
/>
<Route path="/newparty/:id" element={<NewPartyPage />} />
</Routes>
</BrowserRouter>,
2. <Outlet /> 컴포넌트 사용한 구현
function FilterRoute({ filter, fallback }) {
return filter ? <Outlet /> : <Navigate to={fallback} />;
}
ReactDOM.render(
<BrowserRouter>
<Reset />
<Routes>
<Route element={<FilterRoute filter={!isLogin()} fallback="/main" />}>
<Route path="/" element={<IndexPage />} />
<Route path="/login" element={<LoginPage />} />
</Route>
<Route element={<FilterRoute filter={isLogin()} fallback="/" />}>
<Route path="/main" element={<MainPage />} />
</Route>
<Route element={<FilterRoute filter={isLogin()} fallback="/login" />}>
<Route path="/" element={<IndexPage />} />
<Route path="/mypage" element={<MyPage />} />
<Route path="/my-party" element={<MyPartyPage />} />
<Route path="/chats/:id" element={<ChatPage />} />
<Route path="/newparty" element={<NewPartyPage />} />
</Route>
<Route path="/main/:search" element={<MainPage />} />
<Route path="/parties/:id" element={<PartyPage />} />
<Route path="/newparty/:id" element={<NewPartyPage />} />
</Routes>
</BrowserRouter>,
document.getElementById('root'),
);
짱짱맨!