Jieunny์ ๋ธ๋ก๊ทธ
S2) Unit 5. [React] React SPA ๋ณธ๋ฌธ
๐ฃ SPA ๋?
โ๏ธ ๋ฑ์ฅ๋ฐฐ๊ฒฝ
โฐ ์ ํต์ ์ธ ์น์ฌ์ดํธ : ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ ๋ด์ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๋ฉด, ๋งค๋ฒ HTML ํ์ผ๋ก ๋ ํ์ด์ง '์ ์ฒด'๋ฅผ ๋ถ๋ฌ์์ผ ํ๋ค.
โฐ ์ด๋๋ง๋ค header, navigation bar ๋ฑ ์ค๋ณต๋๋ ์์๋ค์ ๋งค๋ฒ ๋ถ๋ฌ์ค๋ ๊ฒ์ ์์ด์์ ๋ถํ์ํ ํธ๋ํฝ์ ๋ฐ์ ์์ผฐ๋ค.
โฐ ์ฌ์ฉ์ ์ ์ฅ์์๋ ๋๋ฆฐ ๋ฐ์์ฑ์ ๊ฐ๊ฒ ๋์๋ค.
โ๏ธ SPA?
โฐ Single Page Application
โฐ ์๋ฒ๋ก๋ถํฐ ์์ ํ ์๋ก์ด ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค์ง ์๊ณ ํ์ด์ง ๊ฐฑ์ ์ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ฐ์ ๊ทธ ์ ๋ณด๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ฌ์ ํ์ด์ง๋ฅผ ์ ๋ฐ์ดํธํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ ์น ์ฌ์ดํธ
โ๏ธ ์ฅ์
โฐ ๋ถ๋ถ ๋ฐ์ดํฐ๋ง ๋ฐ์์ ํ๋ฉด์ ์ ๋ฐ์ดํธ ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์์ ํ๋์ ๋น ๋ฅด๊ฒ ๋ฐ์ํ๋ค.
โฐ ์๋ฒ์์๋ ์์ฒญ๋ฐ์ ๋ฐ์ดํฐ๋ง ๋๊ฒจ์ฃผ๊ธฐ ๋๋ฌธ์ ์๋ฒ ๊ณผ๋ถํ ๋ฌธ์ ๊ฐ ์ค์ด๋ ๋ค.
โฐ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ ๋๋ง ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ค.
โ๏ธ ๋จ์
โฐ JS ํ์ผ์ ํฌ๊ธฐ๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ ์ด JS ํ์ผ์ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ผ๋ก ์ธํด ์ฒซ ๋ก๋ฉ ์๊ฐ์ด ๊ธธ๋ค.
โฐ ๊ฒ์ ๋ก๋ด์ ์๋ฃ๋ฅผ ์์งํ ๋ HTML ์๋ฃ๋ฅผ ๋ถ์ํ๋ ๋ฐฉ์์ผ๋ก ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌ๋ํ๊ธฐ ๋๋ฌธ์ HTML ํ์ผ์ ๋ณ๋ค๋ฅธ ์๋ฃ๊ฐ ์๋ SPA์ ๊ฒฝ์ฐ ๊ฒ์ ์์ง ์ต์ ํ๊ฐ ์ข์ง ๋ชปํ๋ค.
๐ฃ Wireframe
โ๏ธ Wireframe vs Mockup
Wireframe | Mockup |
์นํ์ด์ง์ ๋ ์ด์์๊ณผ UI ์์ ๋ฑ์ ๋ํ ๋ผ๋(๋์์ธX) |
๋ฐ๋ชจ ์์ฐ, ํ๊ฐ๋ฅผ ์ํ ์ต์ํ์ ๊ธฐ๋ฅ๋ง ๋ด์ ๋ชจํ(๋์์ธO) |
โ๏ธ React๋ฅผ ์ด์ฉํ ์ค๊ณ
โฐ ์ด๋ค ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ , ์ด๋ค์ ์กฐํฉํ ์ง ๊ณํํ๋๊ฒ ์ฐ์
โฐ ์ปดํฌ๋ํธ๋ค๋ผ๋ฆฌ ๋ณด๋ค ์ ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ์ค๊ณํด์ผ ํ๋ค.
๐ฃ React Router
โ๏ธ React Router๋?
โฐ SPA๋ ํ๋์ ํ์ด์ง๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ํ ์ข ๋ฅ์ ํ๋ฉด๋ง ์ฌ์ฉํ๋ ๊ฑด ์๋๋ค.
โฐ ํ๋ฉด์ ๋ฐ๋ผ ์ฃผ์๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒ
โฐ ๋ค๋ฅธ ์ฃผ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ณผ์ : Routing
โฐ ๋ฆฌ์กํธ์ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์์ง ์์์ React Router๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
โ๏ธ React Router ํ์ฉ
โฐ ์ฃผ์ ์ปดํฌ๋ํธ
1๏ธโฃ BrowserRouter : ๋ผ์ฐํฐ ์ญํ
2๏ธโฃ Routes, Route : ๊ฒฝ๋ก๋ฅผ ๋งค์นญ
3๏ธโฃ Link : ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝ
โฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
npm install react-router-dom@^6.3.0
โฐ ๋ถ๋ฌ์ค๊ธฐ
import { BrowserRouter, Routes, Route, Link } from "react-router-dom";
๐ฃ React Router ์ค์ต
โ๏ธ <BrowserRouter> : ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ์ง ์๊ณ ๋ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ฒ ํด์ค๋ค.
โฐ BrowserRouter๊ฐ ์์์ ์์ฑ๋์ด ์์ด์ผ React Router์ ์ปดํฌ๋ํธ๋ค์ ์ฌ์ฉํ ์ ์๋ค.
โ๏ธ <Routes> : ์ฌ๋ฌ <Route> ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ์ ๊ทธ ์ค ๊ฒฝ๋ก๊ฐ ์ผ์นํ๋ ๋จ ํ๋์ ๋ผ์ฐํฐ๋ง ๋ ๋๋ง ์์ผ์ค๋ค.
โฐ <Routes>๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋งค์นญ๋๋ ๋ชจ๋ ์์๋ฅผ ๋ ๋๋งํ๋ค.
โ๏ธ <Route> : path์์ฑ์ ์ง์ ํด์ ํด๋น path์์ ์ด๋ค ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ค์ง ์ ํ๋ค.
โฐ <Link> ์ปดํฌ๋ํธ๊ฐ ์ ํด์ฃผ๋ URL ๊ฒฝ๋ก์ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ์๋๋๋ค.
๐จ ์ฌ์ฉ์๊ฐ ์ง์ ๋ ์ฃผ์ ์ด์ธ์ ์ฃผ์๋ก ์ ๊ทผํ๊ฒ ๋๋ฉด ์๋ํ ํ๋ฉด์ด ๋ณด์ด์ง ์์ ์ ์๋ค.
์ด๋ด ๋, path="*" ๋ฅผ ์ง์ ํด์ฃผ๋ฉด ์ง์ ๋์ง ์์ ์ฃผ์๋ก ์ ๊ทผํ ์์๋ ์ด ์์ฑ์ด ์ค์ ๋์ด ์๋ ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ค๋ค.
โ๏ธ <Link> : ๊ฒฝ๋ก๋ฅผ ์ฐ๊ฒฐํด ์ฃผ๋ ์ญํ ์ ํ๋ค.
โฐ ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค์ง ์๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ๋๋ก ์ ์งํ์ฌ ํ์ด์ง์ ์ฃผ์๋ง ๋ณ๊ฒฝํด ์ค๋ค.
โฐ ReactDOM์ผ๋ก ๋ ๋๋ฅผ ์ํค๋ฉด <Link> ๊ฐ <a> ์์๋ก ๋ฐ๋๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
โฐ <a> ์์๋ ํ์ด์ง๋ฅผ ์ ํํ๋ ๊ณผ์ ์์ ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์ ๋ค์ ์ฒ์๋ถํฐ ๋ ๋๋ง์ ์ํจ๋ค -> ์๋ก๊ณ ์นจ
โฐ ํ์ง๋ง <Link> ์ปดํฌ๋ํธ๋ ์ด๋ฅผ ๋ฐฉ์งํ๋ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ <a> ๋์ ์ฌ์ฉํ๋ค.
import logo from './logo.svg';
import './App.css';
import React from 'react';
import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';
function App() {
return (
<BrowserRouter>
<div>
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/mypage">MyPage</Link>
</li>
<li>
<Link to="/dashboard">Dashboard</Link>
</li>
</ul>
</nav>
{/* ์ฃผ์ ๊ฒฝ๋ก์ ์๊น ๋ง๋ 3๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์ฐ๊ฒฐํด ์ค๋๋ค. */}
{/* Routes ์ปดํฌ๋ํธ๋ Route ์ปดํฌ๋ํธ๋ค์ ๊ฐ์ธ๊ณ ์์ด์ผ ํฉ๋๋ค. */}
<Routes>
{/* ๊ฒฝ๋ก๋ path๋ก ์ปดํฌ๋ํธ๋ element๋ก ์ฐ๊ฒฐํด ์ค๋๋ค. */}
<Route path="/" element={<Home />} />
<Route path="/mypage" element={<MyPage />} />
<Route path="/dashboard" element={<Dashboard />} />
</Routes>
</div>
</BrowserRouter>
);
}
// Home ์ปดํฌ๋ํธ
function Home() {
return <h1>Home</h1>;
}
// MyPage ์ปดํฌ๋ํธ
function MyPage() {
return <h1>MyPage</h1>;
}
// Dashboard ์ปดํฌ๋ํธ
function Dashboard() {
return <h1>Dashboard</h1>;
}
export default App;
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S2) Unit 7. [HTTP/๋คํธ์ํฌ] HTTP (0) | 2023.01.30 |
---|---|
S2) Unit 6. [React] React State & Props (2) | 2023.01.26 |
S2) Unit 4. [React] ๊ธฐ์ด (0) | 2023.01.20 |
S2) Unit 3. [JS] fetch & Axios (0) | 2023.01.19 |
S2) Unit 3. [JS] Node.js (0) | 2023.01.18 |