/src/components ํด๋, /src/routes ํด๋ ์์ฑ
App.js components ํด๋๋ก ์ด๋, index.js์์ App.js import path ์์ ํ๊ธฐ
๐ /routes ํด๋์ route ๋ง๋ค๊ธฐ
Auth.js (๋ก๊ทธ์ธ: ์ธ์ฆ)Home.js (ํ: ํธ์ ์์ฑ & ํธ์๋ณด๊ธฐ)Profile.js (ํ๋กํ)EditProfile.js (ํ๋กํ ์์ )//function component๋ก ๋ง๋ค์.
export default () => <span>Auth</span>;
//๊ทธ๋ฐ๋ฐ ๋ค๋ฅธ ํ์ผ์์ Auth๋ฅผ ๊ฐ์ ธ๋ค ์ธ ๋ ์๋์ผ๋ก import ๋๊ฒ ํ๊ณ ์ถ์ผ๋ฉด ์ด๋ ๊ฒ ์ฐ๋ฉด ๋๋ค.
const Auth = () => <span>Auth</span>;
export default Auth;
โ๏ธ react-router-dom v.6๋ก ์์
react-router-dom ์ค์น
npm i react-router-dom
Router๋ components์ด๊ธฐ ๋๋ฌธ์ ๐ /components/Router.js๋ฅผ ๋ง๋ค์ด ์ฃผ์
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import { useState } from "react";
import Auth from "../routes/Auth";
import Home from "../routes/Home";
const AppRouter = () => {
//useState Hook
//๋ก๊ทธ์ธ ์ํ ์ํ๊ฐ ๋ํํธ๊ฐ์ด ๋๋๋ก false๋ฅผ ๋ฃ์ด ๋์.
const [isLoggedIn, setIsLoggedIn] = useState(false);
return (
<Router>
<Routes>
{/* ๋ก๊ทธ์ธํ ์ํ๋ฉด ํ์ผ๋ก, ์๋๋ฉด ์ด์ค๋ก, ์ผ๋จ path๋ ๋๋ค /๋ก ํ์*/}
{isLoggedIn ? (
<Route path="/" element={<Home />}></Route>
) : (
<Route path="/" element={<Auth />}></Route>
)}
</Routes>
</Router>
);
};
export default AppRouter;
๐ /src/components.App.jsimport AppRouter from "./Router";
function App() {
return <AppRouter />;
}
export default App;
Router๋ ํ๋์ ์ฉ๋๋ก๋ง ์ฐ์ด๋๊ฒ ์ข๊ธฐ ๋๋ฌธ์ Router.js์ AppRouter์ useState๋ฅผ ์ญ์ ํ์.
๐ App.js
Application(App.js)์ด ๋ชจ๋ ๋ก์ง์ ๋ค๋ฃจ๊ฒ ํ์.
import AppRouter from "./Router";
import { useState } from "react";
function App() {
//๐ฅ useState Hook
const [isLoggedIn, setIsLoggedIn] = useState(false);
//Router ๋ ๋ํ๊ธฐ
//๐ฅ AppRouter์ prop ์ ๋ฌํ๊ธฐ
return <AppRouter isLoggedIn={isLoggedIn} />;
}
export default App;
๐ Router.js
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import Auth from "../routes/Auth";
import Home from "../routes/Home";
//๐ฅ App์์ AppRouter๋ก ๋ณด๋ธ prop์ธ isLoggedIn ๋ฐ๊ธฐ
const AppRouter = ({ isLoggedIn }) => {
return (
<Router>
<Routes>
{/* ๋ก๊ทธ์ธํ ์ํ๋ฉด /์ผ๋ก, ์๋๋ฉด /login์ผ๋ก */}
{isLoggedIn ? (
<Route path="/" element={<Home />}></Route>
) : (
<Route path="/" element={<Auth />}></Route>
)}
</Routes>
</Router>
);
};
export default AppRouter;
๐ฅ App.js๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ ์์ AppRouter๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋?
footer ๋ฑ์ ์ฌ์ฉํ๊ธฐ ์ํด์์ด๋ค.
์ด๋ ๊ฒ ๋ถ๋ฆฌํ์ฌ ์์ฑํ๋ฉด AppRouter์์ ์คํฌ๋ฆฐ์ด ๋ฐ๋์ด๋ ํธํฐ๋ ํญ์ ๋์จ๋ค.
๐ App.js
import AppRouter from "./Router";
import { useState } from "react";
function App() {
//๐ฅ useState Hook
const [isLoggedIn, setIsLoggedIn] = useState(false);
//Router ๋ ๋ํ๊ธฐ
//๐ฅ AppRouter์ prop ์ ๋ฌํ๊ธฐ
return (
<>
<AppRouter isLoggedIn={isLoggedIn} />
<footer>© twinkle {new Date().getFullYear()}</footer>
</>
);
}
export default App;
JSX fragnent
<>...</>
: ๋ ๋ํ๊ณ ์ถ์ ํ๊ทธ๊ฐ ๋ง์ ๋ฐ ์์ ๋ถ๋ชจ์์๊ฐ ํ๊ทธ ์ ์ฒด๋ฅผ ๊ฐ์ธ๋ ํํ๊ฐ ์๋ ๊ฒฝ์ฐ, ์ ์ฒด๋ฅผ ๊ฐ์ธ๋ ์ฉ๋๋ก fragnent๋ฅผ ์ฌ์ฉํ๋ค.