โช๏ธ SPA(Single Page Application) - ํ์ด์ง๊ฐ ํ ๊ฐ์ธ ์ ํ๋ฆฌ์ผ์ด์
โช๏ธ Westgram-frontend :login.html
,main.html
-ํ์ด์ง ์๋งํผ html ํ์ผ์ด ์กด์ฌ
โช๏ธ ๋ฆฌ์กํธ ํ๋ก์ ํธ์์.html
ํ์ผ์ ๊ฐ์๋? 1๊ฐ >>> SPA(Single Page Application)
โช๏ธ ํ ๊ฐ์ ์นํ์ด์ง(html
)์์์ ์ฌ๋ฌ ๊ฐ์ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ๋ฒ์? >>>Routing
โช๏ธ
๋ผ์ฐํ (Routing)
์ด๋ ๋ค๋ฅธ ๊ฒฝ๋ก(url ์ฃผ์)์ ๋ฐ๋ผ ๋ค๋ฅธ View(ํ๋ฉด)๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด๋ค.
โช๏ธ ๋ฆฌ์กํธ ์์ฒด์๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด์์ง ์๋ค.
โช๏ธ ๋ฆฌ์กํธ๊ฐ Framework๊ฐ ์๋ Library๋ก ๋ถ๋ฅ๋๋ ์ด์
โช๏ธReact-router
๋ ๋ฆฌ์กํธ์ ๋ผ์ฐํ
๊ธฐ๋ฅ์ ์ํด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
Create React App(CRA)์ ํน๋ณํ routing์ ์ํ ๋ก์ง์ด ๋ค์ด์์ง ์๊ธฐ ๋๋ฌธ์, ๊ฐ์ฅ ์ธ๊ธฐ ์๋ routing solution์ธ
react-router
๋ฅผ ์ถ๊ฐํด์ routing์ ๊ตฌํํ ๊ฒ์ด๋ค.
npm install react-router-dom --save
import React from "react"; import { BrowserRouter, Routes, Route } from "react-router-dom"; import Nav from "./components/Nav/Nav"; import Footer from "./components/Footer/Footer"; import Login from "./pages/Login/Login"; import Signup from "./pages/Signup/Signup"; import Main from "./pages/Main/Main"; function Router() { return ( <BrowserRouter> <Nav /> <Routes> <Routes path="/" element={<Login />} /> <Routes path="/signup" element={<Signup />} /> <Routes path="/main" element={<Main />} /> </Routes> <Footer /> <BrowserRouter> ); } export default Router;
ReactDOM.render(<Router />, document.getElementById('root'));
โช๏ธ ํ์ฌ ํ๋ฉด์๋ <App />
์ปดํฌ๋ํธ๊ฐ ๋ณด์ฌ์ง๊ณ ์๋ค.(๋๋ Login ์ปดํฌ๋ํธ, Main ์ปดํฌ๋ํธ)
โช๏ธ CRA๋ก ๋ง๋ ์ฑ์ routing ๊ธฐ๋ฅ์ ์ ์ฉํ๋ ค๋ฉด index.js
๋ฅผ ์์ ํด์ผ ํ๋ค.
โช๏ธ <App />
์ปดํฌ๋ํธ ๋์ ์ routing์ ์ค์ ํ ์ปดํฌ๋ํธ(<Router />
)๋ก ๋ณ๊ฒฝํด์ผ ํ๋ค.
<Link>
์ปดํฌ๋ํธ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒuseNavigate
๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ
<Link>
์ปดํฌ๋ํธ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒimport React from "react"; import { Link } from "react-router-dom"; function Login() { return ( <div> <Link to="/signup">ํ์๊ฐ์ </Link> </div> ); } export default Login;
โช๏ธ Router.js
์์ ์ค์ ํ path๋ก ์ด๋ํ๋ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ <Link />
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
โช๏ธ react-router-dom
์์ ์ ๊ณตํ๋ <Link />
์ปดํฌ๋ํธ๋ DOM์์ <a>
๋ก ๋ณํ(Complie)๋๋ค.
โช๏ธ cf) JSX-Babel-JavaScript
โช๏ธ <a>
ํ๊ทธ์ ๋ง์ฐฌ๊ฐ์ง๋ก <Link />
์ปดํฌ๋ํธ๋ ์ง์ ํ ๊ฒฝ๋ก๋ก ๋ฐ๋ก ์ด๋์์ผ์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ค.
โช๏ธ cf)<a>
vs <Link>
(1)<a>
- ์ธ๋ถ ์ฌ์ดํธ๋ก ์ด๋ํ๋๊ฒฝ์ฐ
(2)<Link />
- ํ๋ก์ ํธ ๋ด์์ ํ์ด์ง ์ ํํ๋ ๊ฒฝ์ฐ
useNavigate
๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒimport React from "react"; import { useNavigate } from "react-router-dom"; function Login() { const navigate = useNavigate(); const goToMain = () => { navigate("/main"); }; // ์ค์ ํ์ฉ ์์ // const goToMain = () => { // if(response.message === "valid user") { // navigate('/main'); // } else { // alert("๊ฐ์ ๋ ํ์์ด ์๋๋๋ค. ํ์๊ฐ์ ์ ๋จผ์ ํด์ฃผ์ธ์.") // navigate('/signup'); // } //} return ( <div> <button className="loginBtn" onClick={goToMain}> ๋ก๊ทธ์ธ </button> </div> ); } export default Login;
โช๏ธ <Link />
๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํจ์ ํธ์ถ์ ํตํด ํ์ด์ง๋ฅผ ์ด๋ํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
โช๏ธ goToMain
ํจ์์์ ๊ตฌํ๋ ๊ฒ์ฒ๋ผ, useNavigate
ํ
์ ํตํด ํ์ด์ง๋ฅผ ์ด๋ํ ์ ์๋ค.
โช๏ธ useNavigate
ํ
์ ์คํํ๋ฉด ํ์ด์ง ์ด๋์ ํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์๋ฅผ ๋ฐํํ๋ค. ํด๋น ํจ์๋ฅผ navigate
๋ผ๋ ๋ณ์์ ์ ์ฅํ๋ค.
โช๏ธ ์ดํ, navigate
์ ์ธ์๋ก Router.js
์์ ์ค์ ํ path๋ฅผ ๋๊ฒจ์ฃผ๋ฉด, ํด๋น ๊ฒฝ๋ก๋ก ์ด๋ํ ์ ์๋ค.
โช๏ธ usenavigate
๋ ํน์ ํจ์๋ฅผ ํธ์ถํด์ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํด์ค
<Link />
useNavigate
useNavigate
ํ
์ ํ์ฉํ์ฌ ๊ตฌํํ๋ค.