/components/Navigation.js ํ์ผ ์์ฑ ํ <Link to="url">๋ด์ฉ</Link>์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋งํฌ๋ฅผ ๊ฑด๋ค.
import { Link } from "react-router-dom";
const Navigation = () => (
<nav>
<ul>
<li>
<Link to="/">ํ</Link>
</li>
<li>
<Link to="/profile">ํ๋กํ</Link>
</li>
</ul>
</nav>
);
export default Navigation;
"/profile"๋ก ์ด๋ ์ ๋ก๊ทธ์์ ๋ฒํผ์ ๋ณผ ์ ์๊ฒ ํ์.๋ก๊ทธ์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด authService.signOut();์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ๊ณ์ ์ ๋ก๊ทธ์์์ํค๋ฉด ๋๋ค."/profile" ํ์ด์ง์ ๋จธ๋ฌผ๊ธฐ ๋๋ฌธ์ "/"์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธํด์ผ ํ๋ค.useNavigate()์ ์ฌ์ฉํ๋ฉด ํ์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธํ ์ ์๋ค.const navigate = useNavigate(); // "/"์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ navigate("/");
import { authService } from "fbase";
import { useNavigate } from "react-router-dom";
export default () => {
const navigate = useNavigate();
const onLogOutClick = () => {
authService.signOut();
//home์ผ๋ก ๋์๊ฐ๊ธฐ ์ํด react router dom์ useNavigate() ๋ฉ์๋ ์ฌ์ฉ
navigate("/");
};
return (
<>
<button onClick={onLogOutClick}>๋ก๊ทธ์์</button>
</>
);
};
//๐ฅ Navigation ์ปดํฌ๋ํธ์ profile ๋ฃจํธ๋ฅผ ๊ฐ์ ธ์จ๋ค.
import Navigation from "components/Navigation";
import Profile from "routes/Profile";
isLoggedIn์ด ์ฐธ์ธ ๊ฒฝ์ฐ์๋ง <Navigation />์ด ์์ ์ ์๋๋ก &&์ ์ฌ์ฉํด ์ฝ๋๋ฅผ ์์ฑํ๊ณ <Route />์ path์ url์ ์ ๋๋ค.<Router>
{/*๐ฅ &&์ ์๋ฏธ: <Navigation />์ด ์กด์ฌํ๋ ค๋ฉด isLoggedIn์ด ์ฐธ์ด์ด์ผ ํ๋ค*/}
{isLoggedIn && <Navigation />}
<Routes>
{/* ๋ก๊ทธ์ธํ ์ํ๋ฉด /์ผ๋ก, ์๋๋ฉด /login์ผ๋ก */}
{isLoggedIn ? (
<>
<Route path="/" element={<Home />}></Route>
<Route path="/profile" element={<Profile />}></Route>
</>
) : (
<Route path="/" element={<Auth />}></Route>
)}
</Routes>
</Router>
<Route path="*" element={<Navigate replace to="/" />} />"/"๋ก ๋ฆฌ๋ค์ด๋ ํธํ๊ธฐ ์ํด <Redirect from="*" to="/" />๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ์ผ๋ React v.6 ์์๋ <Redirect />๊ฐ ์ฌ๋ผ์ก๋ค๊ณ ํ๋ค..๐ฎRoutes ์์๋ Route๋ง ๋ฃ๊ธฐ๋ฅผ ๊ถ์ฅ<Redirect /> ๋์ <Route />์ element ์์ฑ์ผ๋ก <Navigate replace to="url"/>์ ์ฌ์ฉ<Route path="*" element={<Navigate replace to="/" />} />
๋จผ์ <Route />์ element ์์ฑ์ผ๋ก <Navigate replace to="url"/>์ ์ฌ์ฉํ๊ธฐ ์ํด react-router-dom์์ Navigate์ ์ํฌํธ ํ๋ค.
import {
BrowserRouter as Router,
Routes,
Route,
//๐ฅ <Route />์ element ์์ฑ์ผ๋ก <Navigate replace to="url"/>์ ์ฌ์ฉํ๊ธฐ ์ํด react-router-dom์์ Navigate์ ์ํฌํธ ํ๋ค.
Navigate,
} from "react-router-dom";
๊ทธ๋ฌ๊ณ ๋์ <Route />์ element ์์ฑ์ผ๋ก <Navigate replace to="url"/>์ ์ฌ์ฉํ์ฌ ์ ํด์ง url์ธ์ ๋ค๋ฅธ url๋ก ์ ๊ทผ์ ๋ชจ๋ "/"๋ก ๋ฆฌ๋ค์ด๋ ํธํ๋ฉด ๋๋ค.
import React from "react";
import {
BrowserRouter as Router<,
Routes,
Route,
//๐ฅ React Router v.6 ๋ถํฐ๋ <Redirect /> ๋์ <Route />์ element ์์ฑ์ผ๋ก <Navigate replace to="url"/>์ ์ฌ์ฉํ๋ค.
Navigate,
} from "react-router-dom";
//์ ๋๊ฒฝ๋ก๋ก ๋ฐ๊ฟ
import Auth from "routes/Auth";
import Home from "routes/Home";
//๐ฅ Navigation ์ปดํฌ๋ํธ์ profile ๋ฃจํธ๋ฅผ ๊ฐ์ ธ์จ๋ค.
import Navigation from "components/Navigation";
import Profile from "routes/Profile";
//App์์ AppRouter๋ก ๋ณด๋ธ prop์ธ isLoggedIn ๋ฐ๊ธฐ
const AppRouter = ({ isLoggedIn }) => {
return (
<Router>
{/*๐ฅ &&์ ์๋ฏธ: <Navigation />์ด ์กด์ฌํ๋ ค๋ฉด isLoggedIn์ด ์ฐธ์ด์ด์ผ ํ๋ค*/}
{isLoggedIn && <Navigation />}
<Routes>
{/* ๋ก๊ทธ์ธํ ์ํ๋ฉด /์ผ๋ก, ์๋๋ฉด /login์ผ๋ก */}
{isLoggedIn ? (
<>
<Route path="/" element={<Home />}></Route>
<Route path="/profile" element={<Profile />}></Route>
{/*๐ฅ ์ ํด์ง url์ธ์ ๋ค๋ฅธ url๋ก ์ ๊ทผ์ ๋ชจ๋ "/"๋ก ๋ฆฌ๋ค์ด๋ ํธํ๊ธฐ*/}
<Route path="*" element={<Navigate replace to="/" />} />
</>
) : (
<>
<Route path="/" element={<Auth />}></Route>
{/*๐ฅ ์ฌ๊ธฐ๋*/}
<Route path="*" element={<Navigate replace to="/" />} />
</>
)}
</Routes>
</Router>
);
};
export default AppRouter;