SPA
SPA๋ Single Page Application์ ์ฝ์์ ๋๋ค.
๋ง ๊ทธ๋๋ก ํ์ด์ง๋ฅผ ์ฎ๊ธธ ๋ ๋ค๋ฅธ ์๋ก์ด ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ด ์๋๋ผ
ํ๋์(Single) ํ์ด์ง ๋ด์์ ์๋ฒ๋ก๋ถํฐ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ฐ์์ ํด๋นํ๋ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธํ๋ ํ์ด์ง๋ฅผ ๋งํฉ๋๋ค.
์์ ํ ์๋ก์ด ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ด ์๋๋ผ, ํ๋ฉด์ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ํ์ํ ๋ฐ
์ฅ์ : ํ์ด์ง ์ด๋ ์ ๋ณํ๋ ๋ถ๋ถ๋ง ๋ก๋ฉํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ๋ถํ ๊ฑธ๋ฆด ํ๋ฅ ๋ฎ์ต๋๋ค.
๋จ์ : ๋น์ด์๋ HTML์ ๋นํด JavaScript ํ์ผ์ ๋ฌด๊ฒ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ผ๋ก ์ธํด ๋ก๋ฉ ์๊ฐ ๊ธธ์ด์ง๋๋ค.
๋ํ ๊ฒ์์์ง ์ต์ ํ์๋ ์ข์ง ์๋ค๊ณ ํฉ๋๋ค.
์ฐ์ ๊ฒ์์์ง์ ์๋๋ฐฉ์์ ๋ํด ์์๋ณด์๋ฉด ๊ฒ์ ๋ก๋ด์ด ์นํ์ด์ง์ ์ ๋ณด๋ฅผ ์์ง ๋ฐ ๋ถ์์ ํตํด ๊ฒฐ๊ณผ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ถ์ฌ ๋ณด๊ดํฉ๋๋ค.
์ดํ ์ฌ์ฉ์๊ฐ ๊ฒ์ํ๋ฉด ๋ณด๊ดํจ์ ์๋ ์ธ๋ฑ์ค ์ค ๊ฒ์์ด์ ์ฐ๊ด์ฑ์ด ๋์ ์๋๋ก ์นํ์ด์ง๋ค์ ๊ตฌ์ฑํด์ ๋ณด์ฌ์ค๋๋ค.
์ด๋ ๊ฒ ์๋ํ๊ธฐ ์ํด์๋ ์น ํ์ด์ง์ URL์ ๋ฌผ๋ก ์ด๊ณ HTML ๋ฌธ์ ๋ด์ ๊ฐ์ข ํ๊ทธ๋ ๋งํฌ ๋ฑ์ด ์์ด์ผ ๋ถ์ํ ์ ์๋๋ฐ,
SPA๋ HTML์ด ๊ฑฐ์ ๋น์ด์์ด์ ๊ฒ์ ๋ก๋ด์ด ์ถฉ๋ถํ ์๋ฃ๋ฅผ ์์งํ์ง ๋ชปํฉ๋๋ค.
์์ด์ดํ๋ ์
์์ด์ด ํ๋ ์์ด๋ ๋์์ธ์ ํ๊ธฐ ์ ๋จ๊ณ๋ก ํ์ด์ง์ ํ๋ ์์ ์ง๋ ์์ ์ ๋งํฉ๋๋ค.
๊ฐ๋ฐ์๋ค์ ์ด๊ฒ์ ํตํด ์นํ์ด์ง์ ์ปจ์ ์ ์ดํดํ ์ ์๋ค๊ณ ํฉ๋๋ค.
์ฐธ๊ณ ๋ก ๋ชฉ์ ์ PC๋ ๋ชจ๋ฐ์ผ์ ํ๋ ์์ ๋ง๊ฒ ๋ง๋ค์ด ์ง๊ด์ ์ผ๋ก ์ดํด๊ฐ ๊ฐ๋ฅํ๋๋ก ๋์์ธํ ๊ฒ์ ๋งํฉ๋๋ค.
์์ด์ด ํ๋ ์์ ๊ตฌ์ํ ๋๋ ๋จผ์ ์ด๋ค ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด์ ์ด๋ป๊ฒ ์กฐํฉํ ์ง๋ฅผ ๊ตฌ์ํฉ๋๋ค.
EX) ์ ํ๋ธ๋ ํค๋, ์ปจํ ์ธ , ๊ทธ๋ฆฌ๊ณ ์ปจํ ์ธ ์์ ์ธ๋ค์ผ, ์กฐํ์, ์ ๋ก๋ํ ๋ ์ง ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ UI์ ๋ง๊ฒ ํ๋ฉด์ ์ถ๋ ฅํฉ๋๋ค.
๋ผ์ฐํ
๋ผ์ฐํ (Routing)์ "๊ฒฝ๋ก์ ๋ฐ๋ผ ๋ณ๊ฒฝํ๋ค"๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋ค๋ฅธ ์ฃผ์์ ๋ฐ๋ผ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ณผ์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
React SPA์์๋ ๋ผ์ฐํ ์ ์ํด React Router ๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
React Router์ ์ฃผ์ ์ปดํฌ๋ํธ๋ ํฌ๊ฒ 3๊ฐ์ง๋ก ๋๋ ์ ์์ต๋๋ค.
๋ผ์ฐํฐ ์ญํ ์ ํ๋ BrowserRouter, ๊ฒฝ๋ก๋ฅผ ๋งค์นญํด์ฃผ๋ Switch ์ Route, ๊ทธ๋ฆฌ๊ณ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ๋ ์ญํ ์ ํ๋ Link ์ ๋๋ค.
์ด ์ปดํฌ๋ํธ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ React Router ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฐ๋ก ๋ถ๋ฌ์์ผ ํฉ๋๋ค.
Import๋ ํ์ํ ๋ชจ๋์ ๋ถ๋ฌ์ค๋ ์ญํ ๋ก ๋น๊ตฌ์กฐํ ํ ๋น(destructuring assignment)๊ณผ ๋น์ทํ๊ฒ ์ด์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ผ ์ค์ ๋ก ์ด๋ป๊ฒ ๋ผ์ฐํ ์ ํ ์ ์๋์ง์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1. ๋จผ์ ๋ผ์ฐํ ์ ํ ์ ์๋๋ก ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ํด์ค๋๋ค.
๋จผ์ React Router DOM์ ์ค์นํ ํ, import๋ฅผ ์ฌ์ฉํด์ ์ปดํฌ๋ํธ๋ค์ ๊ฐ์ง๊ณ ์ต๋๋ค.
2. ๋ผ์ฐํธ์ ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํด์ค๋๋ค.
์๋ ์์์๋ Home, MyPage, Dashboard๊ฐ ์์ต๋๋ค.
3. ์์ ์ปดํฌ๋ํธ๋ค์ด ๋ณด์ฌ์ง ์ ์๋๋ก ๋ฉ๋ด๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
<div>, <li> ๋ฑ์ ์ด์ฉํด์ ๊ตฌ์ฑํฉ๋๋ค.
4. ๋ชจ๋ ๊ฒ๋ค์ด ์ค๋น๋์ผ๋ ์ฃผ์์ ๋ฐ๋ผ ํ์ด์ง๊ฐ ๋ฌ๋ผ์ง ์ ์๋๋ก ์ค์ ํด์ค๋๋ค.
1) Route ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด <BrowserRouter>๋ฅผ ์ด์ฉํฉ๋๋ค.
2) ์ฃผ์ ๊ฒฝ๋ก์ 2๋ฒ์์ ๋ง๋ ์ปดํฌ๋ํธ๋ค์ ์ฐ๊ฒฐํด์ฃผ๊ธฐ ์ํด <Switch> ์ <Route>๋ฅผ ์ด์ฉํฉ๋๋ค.
3) Link์ to๋ฅผ ์ด์ฉํด์ ์ปดํฌ๋ํธ์ path์ฃผ์๋ฅผ ์ฐ๊ฒฐํด์ค๋๋ค.
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter,Switch, Route} from 'react-router-dom';
ReactDOM.render(<BrowserRouter><App/></BrowserRouter>, document.querySelector('#root'));
function App() {
return (
<BrowserRouter>
<div>
<nav>
<ul>
<li>
<Link to="/">Home</Link> {/* Link ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํ์ฌ ๊ฒฝ๋ก๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค */}
</li>
<li>
<Link to="/about">MyPage</Link>
</li>
<li>
<Link to="/dashboard">Dashboard</Link>
</li>
</ul>
</nav>
<Switch>
<Route exact path="/">
<Home />
</Route>
<Route path="/about">
<MyPage />
</Route>
<Route path="/dashboard">
<Dashboard />
</Route>
</Switch>
</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;
Sprint Office Hour
window.history.back ๋๋ window.history.forward๋ฅผ ํ์ฉํด์ ๊ตฌํ ๊ฐ๋ฅ
'TIL > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TIL 22 (1): ์น ๊ตฌ๋ ๋ฐฉ์ (0) | 2021.08.21 |
---|---|
TIL 20: React ๊ธฐ์ด - State & Props (0) | 2021.08.13 |
TIL18: React ๊ธฐ์ด (0) | 2021.08.11 |
TIL 17: ๊ณ ์ฐจํจ์ (0) | 2021.08.11 |
TIL 16: ์ ํจ์ฑ ๊ฒ์ฌ, ์ด๋ฒคํธ ๊ฐ์ฒด (0) | 2021.08.09 |