Section2 Unit5 [React] React SPA
π Chapter1. React SPA
• SPAλ μλ²λ‘λΆν° μμ ν μλ‘μ΄ νμ΄μ§λ₯Ό λΆλ¬μ€λ κ²μ΄ μλλΌ, νλ©΄μ μ λ°μ΄νΈνκΈ° μν΄ νμν λ°μ΄ν°λ§ μλ²μμ μ λ¬λ°μ λΈλΌμ°μ μμ ν΄λΉνλ λΆλΆλ§ μ λ°μ΄νΈνλ λ°©μμΌλ‘ μλνλ μΉ μ ν리μΌμ΄μ μ΄λ μΉ μ¬μ΄νΈλ₯Ό λ§νλ€.
• SPAμ μ₯μ
1. νμ΄μ§ μ 체λ₯Ό λ λλ§νλ κ²μ΄ μλλΌ νμν λΆλΆλ§ μ λ°μ΄νΈνκΈ° λλ¬Έμ SPAλ μ¬μ©μμ νλμ λΉ λ₯΄κ² λ°μνλ€.
2. μλ² μ μ₯μμλ μμ²λ°μ λ°μ΄ν°λ§ λ겨주면 λκΈ° λλ¬Έμ κ³Όκ±°μ κ°μ κ³ΌλΆν λ¬Έμ λ νμ ν μ€μΌ μ μλ€.
3. νλ©΄ μ 체λ₯Ό μλ‘ λ λλ§ν νμκ° μκΈ° λλ¬Έμ λ³΄λ€ λμ μ¬μ©μ κ²½νμ μ 곡νλ€.
• SPAμ λ¨μ
1. λΈλΌμ°μ λ 첫 νλ©΄ λ‘λ© μμ HTML νμΌμ μ½μ΄λ€μΈ ν λ¬Έμ λ΄ <script> μμμ JavaScript νμΌμ λ€μ λ°μμ€λ κ³Όμ μ κ±°μΉλ€. μ΄λ 첫 νλ©΄ λ‘λ© μ μ½μ΄λ€μΈ HTML νμΌμ κ±°μ λΉμ΄μκ³ , λλΆλΆμ μ½λλ JavaScript νμΌ μμ λ€μ΄μλ€ λ³΄λ μμ°μ€λ½κ² JavaScript νμΌμ΄ 무거μμ§λ€. λλ¬Έμ μ΄ JavaScript νμΌμ κΈ°λ€λ¦¬λ μκ°μΌλ‘ μΈν΄ 첫 νλ©΄μ λ‘λ© μκ°μ΄ κΈΈμ΄μ§λ€.
2. κ²μ μμ§ μ΅μ ν(SEO)κ° μ’μ§ μλ€. κ²μμμ§ μ΅μ νλ ꡬκΈμ΄λ λ€μ΄λ² κ°μ κ²μμμ§μ΄ μλ£λ₯Ό μμ§νκΈ° μ’λλ‘ μΉ νμ΄μ§λ₯Ό ꡬμ±νλ κ²μ λ»νλ€. κ²μ λ‘λ΄μ μλ£λ₯Ό μμ§ν λμ μΉ νμ΄μ§μ URLμ λ¬Όλ‘ μ΄κ³ HTML λ¬Έμ λ΄μ κ°μ’ νκ·Έλ λ§ν¬ λ±μ λΆμνλ€. SPAλ HTMLμ΄ κ±°μ λΉμ΄μλ€ λ³΄λ κ²μ λ‘λ΄μ΄ μΆ©λΆν μλ£λ₯Ό μμ§νμ§ λͺ»νλ€.
π Chapter2. React Router
• μΉ μ΄ν리μΌμ΄μ μμμ λΌμ°ν μ΄λ μ¬μ©μκ° μμ²ν URLμ λ°λΌ μλ§λ νμ΄μ§λ₯Ό 보μ¬μ£Όλ κ²μ μλ―Ένλ€.
• 리μ‘νΈ λΌμ°ν°λ₯Ό μ¬μ©νλ©΄ μμ½κ² μ±κΈ νμ΄μ§ μ ν리μΌμ΄μ (Single Page Application)μ λ§λ€ μ μλ€.
router | <BrowserRouter> |
route matchers | <Routes> <Route> |
route changers | <Link> |
• 리μ‘νΈ λΌμ°ν°μλ λ λ§μ κΈ°λ₯λ€μ΄ μμ§λ§, μ°μ μ κ°λ¨νκ² μ¬μ©λ² μ λλ§ λ°°μ λ€. <BrowserRouter>λ‘ μ»΄ν¬λνΈλ₯Ό κ°μΈμ£Όκ³ , <Routes>μ <Route>μ <Link>λ₯Ό νμ©ν΄ κ²½λ‘λ₯Ό μ§μ νκ³ , μ΄λμν¬ μ μλ€.
↓ μ¬κΈ° μ λ§ μλ£λ μΆ©λΆνκ³ μ€λͺ λ μ λμ΄μμ΄μ μ°Έκ³ νλ©΄ μ’μ κ² κ°λ€ ππ»
βοΈ κ³Όμ . React Twittler SPA
μ λ μ React Twittler Introμ μ΄μ΄μ μ΄λ²μλ React Route Domμ νμ©ν΄ νμ΄μ§ μ΄λμ ꡬννλ€.
React Route Domμ νμ©ν μμ λ§ μ κΉ κΈ°λ‘ν΄λ³΄μλ©΄, μλμ κ°λ€.
import { BrowserRouter, Routes, Route } from 'react-router-dom';
const App = () => {
return (
<BrowserRouter>
{/* TODO - BrowserRouter μ»΄ν¬λνΈλ₯Ό μμ±ν©λλ€. */}
<main>
<Sidebar />
<section>
{/* TODO - Routesμ Route μ»΄ν¬λνΈλ₯Ό μ΄μ©νμ¬ κ²½λ‘(path)λ₯Ό μ€μ νκ³ Tweets, Mypage, About μ»΄ν¬λνΈλ₯Ό μ°κ²°ν©λλ€. */}
<Routes>
<Route path="/" element={<Tweets />}></Route>
<Route path="/about" element={<About />}></Route>
<Route path="/mypage" element={<MyPage />}></Route>
</Routes>
</section>
</main>
</BrowserRouter>
);
};
import { Link } from 'react-router-dom';
const Sidebar = () => {
return (
<section className="sidebar">
{/* TODO : About λ©λ΄ μμ΄μ½κ³Ό Mypage λ©λ΄ μμ΄μ½μ μμ±νκ³ Link μ»΄ν¬λνΈλ₯Ό μ΄μ©νμ¬ κ²½λ‘(path)λ₯Ό μ°κ²°ν©λλ€. */}
<Link to="/"><i className="far fa-comment-dots"></i></Link>
<Link to="/about"><i className="far fa-question-circle"></i></Link>
<Link to="/mypage"><i className="far fa-user"></i></Link>
</section>
);
};
μμ§ μ΅μμΉ μμμ κ·Έλ°μ§ <Route>λ‘ pathλ₯Ό μ§μ νλ κ²κ³Ό <Link>λ‘ κ²½λ‘λ₯Ό νμνλκ² μ’ ν·κ°λ Έλλ°, μ΄λ² κ³Όμ λ₯Ό ν΅ν΄ μ’ λ μ΅μν΄μ§ κ² κ°λ€. μ λ μ κ² κ·Έλ κ² ν·κ°λ¦¬μ§?
π± μ€ν Q&A μΈμ
• (μΉν© λ²λ€λ§ μ΄ν) 리μ‘νΈλ μ΄λ»κ² μμλλκ°?
1. λ²λ€λ§μ νκ² λλ©΄ μ°λ¦¬κ° μλ νλ²ν js νμΌμ΄ μμ±
2. μμ±λ jsνμΌμ html νμΌμ <script src=””> μ΄λ°μμΌλ‘ μγ μ
3. html νμΌμ node.jsλ₯Ό ν΅ν΄ serving(μ€ν)ν¨
4. κ·Έ μ΄νμλ μΌλ°μ μΌλ‘ js μ€ν λ‘μ§κ³Ό μμ ν λμΌ
• <BrowserRouter>μ μμΉ
μ΄λμ μ¬μ©νλ μκ΄μμ§λ§, λ°λμ νλ²λ§ μ¨μΌνλ€.
κ°μ¬λμ App μ»΄ν¬λνΈ λ΄μ μμ±νλ κ²μ μ νΈ (index.jsλ μ΅λν κΉλν κ²μ μ νΈν΄μ)
function App() {
return <BrowserRouter>{/* ... */}</BrowserRouter>
}
μ΄ λΆλΆ κΆκΈνμλλ°, κ°λ΅νκ² μ€λͺ μ λ€μ μ μμ΄μ λ°°μΈ μ μμλ€.
SPAλ 첫νλ©΄ λ‘λ©μ΄ κΈΈλ€λ λ¨μ μ΄ μλλ°, κ·Έκ±Έ 보μνλ λ°©λ²μΌλ‘λ
1. SSRμΌλ‘ ν΄κ²° → CSRμ λΉν΄ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ΄ λΉ λ₯΄λ€.
2. λ²λ€λ§ μ μ©λ μ΅μ ν νλ λ°©λ² → μ€νμμ€λ₯Ό λλλ‘ λ§μ΄ μ¬μ©νμ§ μλ λ°©λ²μΌλ‘ κ·κ²°λ¨
3. λ€μ΄λλ―Ή import(λμ μΌλ‘ κ°μ Έμ€κΈ°)λ₯Ό μ¬μ© → λΆνμν 리μμ€λ₯Ό μ€μΌ μ μλ€.
π μ€λμ νκ³
μ½λμ€ν μ΄μΈ 컀리νλΌμ Reactλ₯Ό μ΄μ μμνλλ°, stateμ prop λ±μ μ€μν κ°λ μ λ€λ£¨κΈ° μ μ React Router Domμ λ€λ£¨λ λΆλΆμ λ¨Όμ λ€μ΄μλ€. λλμ΄ λ³Έκ²©μ μΌλ‘ νλ©΄μ 보μ΄λ μμ μ νλ μ΄μ λ³΄λ€ λ μ¬λ―Έμλκ² λκ»΄μ‘λ€. 리μ‘νΈ, μΈμ μ―€ μμ μμ¬λ‘ λ€λ£° μ μκ² λ κΉ.
μ£Όλ§λμ μ§κΈκΉμ§ λͺ»νλ λΆλΆλ€μ 볡μ΅νκ³ , μ¬μ λΉλ₯Ό νλ μκ°μ κ°μ ΈμΌκ² λ€.
'Frontend Dev > π₯ μ½λμ€ν μ΄μΈ FE λΆνΈμΊ ν' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Section2 Unit6 [React] React State & Props - κ³Όμ Twittler State & Props (0) | 2023.05.23 |
---|---|
Section2 Unit6 [React] React State & Props (0) | 2023.05.22 |
Section2 Unit4 [React] Intro (0) | 2023.05.18 |
Section2 Unit3 JS/Node λΉλκΈ° - fetchAPI (0) | 2023.05.17 |
Section2 Unit3 JS/Node λΉλκΈ° - λΉλκΈ°μ²λ¦¬ (0) | 2023.05.16 |