[μ£ΌνΉκΈ° κ³Όμ ]
π μλ°μ€ν¬λ¦½νΈμμ μ μ¬λ°°μ΄κ³Ό λ°°μ΄μ μ°¨μ΄λ 무μμΌκΉμ?
μ μ¬λ°°μ΄μ κ° μμλ₯Ό μμ νκ³ μΆλ€λ©΄ μ΄λ€ κ³Όμ μ κ±°μ³μΌν κΉμ?
λ°°μ΄ :
νλμ λ³μμ ν λΉν΄ κ΄λ¦¬νκΈ° μν΄ μ¬μ©νλ λ°μ΄ν° νμ μ΄λ€γ
μ μ¬ λ°°μ΄ :
λ°°μ΄κ³Ό μ μ¬ν κ°μ²΄λ₯Ό λ§νλ€.
μ μ¬ λ°°μ΄μ ν¨μμμ μ²λ¦¬ κ²°κ³Όλ‘ λ°°μ΄μ λ°ννκ³ μΆμ λ λλ, Arrayμμ κΈ°λ³ΈμΌλ‘ λ΄ν¬λμ΄μλ κΈ°λ₯μ μ 곡νκ³ μΆμ§ μκ±°λ Arrayμ λ΄ν¬λμ΄μμ§ μμ κΈ°λ₯μ μ 곡νκ³ μΆμ λ μ¬μ©νλ€.
1. μ«μ ννμ indexingμ΄ κ°λ₯ν κ²
2. length μμ±μ ν¬ν¨ν κ²
μμ κ³Όμ :
1-1. κ°μ νΈμΆ νμ©
1-2. RestνλΌλ―Έν° νμ©
1-3. Array.from λ©μλ νμ©
λ±μ νμ©νμ¬ λ°°μ΄λ‘ λ³νμμΌ μ€ λ€ μμλ₯Ό μμ νλ€.
π λΆλͺ¨ μ»΄ν¬λνΈ Aμ μμ μ»΄ν¬λνΈ Bκ° μμ΅λλ€. μ»΄ν¬λνΈ Aλ stateλ‘ {name: "λ₯΄νμ΄"}λ₯Ό κ°μ§κ³ μκ³ , μμμΈ μ»΄ν¬λνΈ Bμκ² name κ°μ λ겨주μμ΅λλ€. μ»΄ν¬λνΈ Bλ λ°μμ¨ nameμ νλ©΄μ λΏλ €μ£Όκ³ μμ΅λλ€.
μ»΄ν¬λνΈ Aμ stateκ° {name: "μ§λμ¬μ°λ₯΄μ€"}λ‘ λ°λμμ λ, μ΄λ€ κ³Όμ μ κ±°μ³ λ°λ κ°μ νλ©΄μ 보μ¬μ£Όλ μ§ λΌμ΄ν μ¬μ΄ν΄ νλ¦μ κ·Έλ €λ³ΌκΉμ?
λΌμ΄ν μ¬μ΄ν΄ : μ»΄ν¬λνΈκ° λ λλ§μ μ€λΉνλ μκ°λΆν°, νμ΄μ§μμ μ¬λΌμ§ λκΉμ§ κ³Όμ
- μ»΄ν¬λνΈλ μμ±λκ³ -> μμ (μ λ°μ΄νΈ)λκ³ μ¬λΌμ§λ€
- μμ±μ μ²μμΌλ‘ μ»΄ν¬λνΈλ₯Ό λΆλ¬μ€λ λ¨κ³μ λλ€
- μμ (μ λ°μ΄νΈ) λλ κ²½μ°
1) propsκ° λ°λ λ
2) stateκ° λ°λ λ
3) λΆλͺ¨ μ»΄ν¬λνΈκ° μ λ°μ΄νΈ λμμ λ ( 리λ λλ§ νμ λ )
4) κ°μ λ‘ μ λ°μ΄νΈλ₯Ό νμ κ²½μ° ( forceUpdate() )λ₯Ό ν΅ν΄ κ°μ λ‘ μ»΄ν¬λνΈλ₯Ό μ λ°μ΄νΈ ν μ μλ€
-μ κ±°λ νμ΄μ§λ₯Ό μ΄λνκ±°λ, μ¬μ©μμ νλ (μμ λ²νΌ ν΄λ¦)μΌλ‘ μΈν΄ μ»΄ν¬λνΈκ° νλ©΄μμ
μ¬λΌμ§λ λ¨κ³μ λλ€)
----- λΌμ΄ν μ¬μ΄ν΄ νλ¦ -----
- **Mounting**: μ»΄ν¬λνΈκ° νλ©΄μ λνλ¨
### Mounting
μ»΄ν¬λνΈμ μΈμ€ν΄μ€κ° μμ±λμ΄ DOM μμ μ½μ λλ λ¨κ³μ λλ€. Mountingμ Lifecyleμ΄ μ’ λ£λ λκΉμ§ ν λ²λ§ μΌμ΄λ©λλ€. μλ λ©μλλ€μ΄ μ΄ λ¨κ³μμ μμλλ‘ νΈμΆλ©λλ€.
· **constructor**: μ»΄ν¬λνΈμ μΈμ€ν΄μ€λ₯Ό μλ‘ λ§λ€ λλ§λ€ μμ±μ λ©μλκ° νΈμΆλ©λλ€.
· static getDerivedStateFromProps
· **render**: νλ©΄μ ννλ JSXλ₯Ό λ°ννκ³ νλ©΄μ 그립λλ€.
· **componentDidMount**: μ»΄ν¬λνΈκ° νλ©΄μ λͺ¨λ κ·Έλ €μ§ μ΄ν νΈμΆλ©λλ€.
componentDidMount λ©μλλ 첫 λ λλ§ μ΄ν μ€νλ©λλ€. μλν¬μΈνΈμμ ν΄λΌμ΄μΈνΈλ‘ λ°μ΄ν°λ₯Ό λΆλ¬μμΌ νλ κ²½μ°λΌλ©΄, API νΈμΆμ νκΈ° μ’μ μμΉμ λλ€. λ°μ΄ν°λ₯Ό λ°μ μ¬ λ setState λ©μλλ₯Ό μ΄μ©νμ¬ μ»΄ν¬λνΈλ₯Ό μ λ°μ΄νΈν μ μμ΅λλ€.
- **Updating**: μ»΄ν¬λνΈκ° μ λ°μ΄νΈλ¨
### Updating
props λλ stateκ° λ³κ²½λμ΄ μ»΄ν¬λνΈκ° μ λ°μ΄νΈλλ λ¨κ³μ λλ€. μλ λ©μλλ€μ΄ μ΄ λ¨κ³μμ μμλλ‘ νΈμΆλ©λλ€.
· static getDerivedStateFromProps
· shouldComponentUpdate
· **render**: λ°μ΄ν°κ° λ³κ²½λλ©΄ μλμΌλ‘ νΈμΆλ©λλ€. νλ©΄μ λ€μ 그립λλ€.
· getSnapshotBeforeUpdate
· **componentDidUpdate**: νλ©΄μ΄ λ€μ κ·Έλ €μ§ μ΄ν νΈμΆλ©λλ€.
- **Unmounting**: μ»΄ν¬λνΈκ° νλ©΄μμ μ¬λΌμ§
### Unmounting
μ»΄ν¬λνΈκ° DOM μμμ μ κ±°λλ λ¨κ³μ λλ€.
·**componentWillUnmount**: μ»΄ν¬λνΈκ° νλ©΄μμ μ κ±°λκΈ° μ μ νΈμΆλ©λλ€.
### νλ¦ μ€λͺ
μ»΄ν¬λνΈ Aμμ “λ₯΄νμ΄”λΌλ stateλ₯Ό “μ§λμ¬μ°λ₯΄μ€” λ³κ²½ ->
λΆλͺ¨ μ»΄ν¬λνΈμμ Updatingμ΄ λ°μ ->
shouldComponentUpdate κ° μ€ν ->
λ°λ propsλ₯Ό μ΄μ©νμ¬ λΆλͺ¨ μ»΄ν¬λνΈμ λ λλ§ ->
λ§μ°¬κ°μ§λ‘ λ°λ propsλ₯Ό μ΄μ΄λ°μ μ»΄ν¬λνΈ Bμ λ λλ§μ΄ μ€νλ¨
π μλ°©ν₯ λ°μΈλ©μ 무μμΌκΉμ?
μλ°©ν₯ λ°μΈλ©μ μ¬μ©νλ κ²½μ° λ¦¬λ λλ§μ΄ μ΄λ»κ² μ΄λ£¨μ΄μ§ μ§ κ·Έλ €λ³΄μΈμ.
(λΆλͺ¨ μ»΄ν¬λνΈ Aμ μμ μ»΄ν¬λνΈ Bκ° μμμ κ°μ νκ³ κ·Έλ €λ΄ μλ€.)
λ°μ΄ν° λ°μΈλ©μ΄λ?
λ λ°μ΄ν° νΉμ μ 보μ μμ€λ₯Ό μΌμΉμν€λ κΈ°λ²μΌλ‘, νλ©΄μ 보μ΄λ λ°μ΄ν°μ λΈλΌμ°μ λ©λͺ¨λ¦¬μ μλ λ°μ΄ν°(μ¬λ¬κ°μ μλ°μ€ν¬λ¦½νΈ κ°μ²΄)λ₯Ό μΌμΉμν€λ κ²μ λ§νλ€.
μλ°©ν₯ λ°μ΄ν° λ°μΈλ©
μ₯μ : μ½λμ μ¬μ©λ©΄μμ μ½λλμ ν¬κ² μ€μ¬μ€
λ¨μ : λ³νμ λ°λΌ DOM κ°μ²΄ μ 체λ₯Ό λ λλ§ν΄μ£Όκ±°λ λ°μ΄ν°λ₯Ό λ°κΏμ£Όλ―λ‘, μ±λ₯μ΄ κ°μλλ κ²½μ°κ° μμ
컨νΈλ‘€λ¬μμ modelμ΄ λ³κ²½λ¨ -> viewλ³κ²½λ¨
viewμμ scope modelμ΄ λ³κ²½λ¨ -> 컨νΈλ‘€λ¬μμ modelμ΄ λ³κ²½λ¨
μ΄λ κ² μ»¨νΈλ‘€λ¬μ λ·° μμͺ½μ λ°μ΄ν° μΌμΉκ° λͺ¨λ κ°λ₯ν κ²μ΄ μλ°©ν₯ λ°μ΄ν° λ°μΈλ©μ΄λ€. λ°μ΄ν°μ λ³νλ₯Ό κ°μ§ν΄ ν νλ¦Ώκ³Ό κ²°ν©ν΄ νλ©΄μ κ°±μ , νλ©΄μ μ λ ₯μ λ°λΌ λ°μ΄ν°λ₯Ό κ°±μ νλ κ²μ΄λ€. (HTML -> JS, JS -> HTML μμͺ½ λͺ¨λ κ°λ₯)
μλ°©ν₯ λ°μ΄ν° λ°μΈλ©μ λ°μ΄ν°μ λ³κ²½μ νλ μμν¬μμ κ°μ§νκ³ μλ€κ°, λ°μ΄ν°κ° λ³κ²½λλ μμ μ DOM κ°μ²΄μ λ λλ§μ ν΄μ£Όκ±°λ νμ΄μ§ λ΄μμ λͺ¨λΈμ λ³κ²½μ κ°μ§ν΄ JS μ€νλΆμμ λ³κ²½νλ€. μ λ ₯λ κ°μ΄λ λ³κ²½λ κ°μ λ°λΌ λ΄μ©μ΄ λ°λ‘ λ°λκΈ° λλ¬Έμ λ°λ‘ 체ν¬ν΄μ£Όμ§ μμλ λλ€.
μλ°©ν₯ λ°μ΄ν° λ°μΈλ©μ μΉ μ ν리μΌμ΄μ μ 볡μ‘λκ° μ¦κ°νλ©΄ μ¦κ°ν μλ‘ λΉμ λ°νλ€. μλ§μ μ½λμ μμ μ€μ¬μ€ λΏλ§ μλλΌ μ μ§λ³΄μλ μ½λλ₯Ό κ΄λ¦¬νκΈ° λ§€μ° μ½κ² ν΄μ£ΌκΈ° λλ¬Έμ΄λ€.
π event listenerλ λ±λ‘λλ©΄ λ°λμ ν΄μ λμ΄μΌ ν©λλ€.
ν΄λμ€ν μ»΄ν¬λνΈμμλ μ»΄ν¬λνΈκ° νλ©΄μμ μ¬λΌμ§ λ(unmount λ λ) event listenerλ₯Ό ν΄μ ν©λλ€. (componentWillUnmountμμμ!)
κ·ΈλΌ λΌμ΄νμ¬μ΄ν΄ λ©μλλ₯Ό μ¬μ©ν μ μλ ν¨μν μ»΄ν¬λνΈμμλ event listenerλ₯Ό ν΄μ ν λ μ΄λ»κ² ν΄μΌν κΉμ?
useEffect
ν¨μν μ»΄ν¬λνΈμμλ κ°κ°μ λΌμ΄νμ¬μ΄ν΄ λ©μλλ₯Ό useEffect νλλ‘ ν΅μΌμν¬ μ μλ€. λμ dependencyλ₯Ό μ μΈνμ¬ μμ μ ꡬλΆνλ€.
useEffect(() => {
console.log('hi')
}, [/* dependency μ μΈνλ κ³³ */])
λΉ λ°°μ΄μ μ μΈνλ©΄ μ΅μ΄ λ‘λμμλ§ λ λλ§μ΄ λλ€.
μ΄λ²€νΈ ν΄μ νκΈ°
μ΄λ²€νΈλ₯Ό λ±λ‘νκ³ λ λ€ μ±λ₯ μ νλ₯Ό λ°©μ§νκΈ° μν΄ μ»΄ν¬λνΈκ° μΈλ§μ΄νΈ λ λ κΌ μ΄λ²€νΈ λ±λ‘μ ν΄μ ν΄μ£Όμ΄ν νλ€. ν¨μν ν΄λμ€μμλ useEffectμ λ΄λΆ ν¨μμ returnκ°μΌλ‘ removeEventListenerλ₯Ό ν΅ν΄ ν΄μ ν΄μ£Όλ©΄ λλ€.
useEffect(() => {
document.addEventListener();
return () => {
document.removeEventListener();
}
}, [])
π 리μ‘νΈμμλ DOM μμμ μ κ·ΌνκΈ° μν΄ μ£Όλ‘ refλ₯Ό μλλ€.
domcument.getElementsByClassName λ±μ μ°λ κ² μλλΌ refλ₯Ό μ°λ μ΄μ λ 무μμΌκΉμ?
refλ₯Ό μ¬μ©νλ μ΄μ ?
idλ μ μΌν΄μΌ νμ§λ§ μ»΄ν¬λνΈ μ¬μ¬μ©μ νλ€λ©΄ μ€λ³΅λ κ°λ₯μ±μ΄ μλ€.
refλ μ μμ μΌλ‘ μλνμ§ μκ³ μ»΄ν¬λνΈ λ΄λΆμμλ§ μλνλ€.
μ΄λ¨ λ μ¬μ©ν΄μΌ νλκ°?
DOMμ κΌ μ§μ μ μΌλ‘ 건λλ €μΌ ν λ μ¬μ©νλ€.
νΉμ inputμ ν¬μ»€μ€ μ£ΌκΈ°
μ€ν¬λ‘€ λ°μ€ μ‘°μνκΈ°
Canvas μμμ κ·Έλ¦Ό 그리기 λ±
μ μΈμ μΌλ‘ ν΄κ²°λ μ μλ λ¬Έμ μμλ ref μ¬μ©μ μ§μν΄μΌνλ€.
refμ μ¬μ©μ μ΅λν μ€μ¬μΌ νλ€κ³ λͺ μλμ΄μλ€.
π SPA λ°©μκ³Ό MPA λ°©μμ 무μμΈκ°μ?
SPA vs MPA
- SPA(Single Page Application)λ ν κ°(Single)μ Pageλ‘ κ΅¬μ±λ Applicationμ΄λ€.
MPA(Multiple Page Application)λ μ¬λ¬ κ°(Single)μ Pageλ‘ κ΅¬μ±λ Applicationμ΄λ€.
- MPAλ μλ‘μ΄ νμ΄μ§λ₯Ό μμ²ν λλ§λ€ μ μ 리μμ€κ° λ€μ΄λ‘λλλ€. λ§€λ² μ 체 νμ΄μ§κ° λ€μ λ λλ§ λλ€.
λ°λ©΄ SPAλ μΉ μν리μΌμ΄μ μ νμν λͺ¨λ μ μ 리μμ€λ₯Ό μ΅μ΄ ν λ²μ λ€μ΄λ‘λνλ€.
κ·Έ μ΄ν μλ‘μ΄ νμ΄μ§ μμ²μ΄ μμ λ, νμ΄μ§ κ°±μ μ νμν λ°μ΄ν°λ§ μ λ¬ λ°μμ νμ΄μ§λ₯Ό κ°±μ νλ€.
- κ·Έλμ SPAλ₯Ό CSR(Client Side Rendering) λ°©μμΌλ‘ λ λλ§νλ€κ³ λ§νλ€.
κ·Έλμ MPAλ₯Ό SSR(Server Side Rendering) λ°©μμΌλ‘ λ λλ§νλ€κ³ λ§νλ€.
MPA(Multiple Page Application)
- μ¬λ¬ κ°(Single)μ Pageλ‘ κ΅¬μ±λ Applicationμ΄λ€.
- MPAλ SSR(Server Side Application) λ°©μμΌλ‘ λ λλ§νλ€.
μλ‘μ΄ νμ΄μ§λ₯Ό μμ²ν λλ§λ€ μλ²μμ λ λλ§λ μ μ 리μμ€(HTML, CSS, JavaScript)κ° λ€μ΄λ‘λλλ€.
νμ΄μ§ μ΄λνκ±°λ μλ‘κ³ μΉ¨νλ©΄ μ 체 νμ΄μ§λ₯Ό λ€μ λ λλ§νλ€.
π MPA μ₯μ
1. SEO κ΄μ μμ μ 리νλ€.
- MPAλ μμ±λ ννμ HTML νμΌμ μλ²λ‘λΆν° μ λ¬λ°λλ€.
λ°λΌμ κ²μμμ§μ΄ νμ΄μ§λ₯Ό ν¬λ‘€λ§νκΈ°μ μ ν©νλ€.
2. 첫 λ‘λ© λ§€μ° μ§§λ€.
- μλ²μμ μ΄λ―Έ λ λλ§ν΄ κ°μ Έμ€κΈ° λλ¬Έμ΄λ€.
- κ·Έλ¬λ ν΄λΌμ΄μΈνΈκ° JS νμΌμ λͺ¨λ λ€μ΄λ‘λνκ³ μ μ©νκΈ°μ κΉμ§λ κ°κ°μ κΈ°λ₯μ λμνμ§μλλ€.
π MPA λ¨μ
1. μλ‘μ΄ νμ΄μ§λ₯Ό μ΄λνλ©΄ ‘κΉλΉ‘’μΈλ€. (UX)
- λ§€ νμ΄μ§ μμ²λ§λ€ 리λ‘λ©(μλ‘κ³ μΉ¨) λ°μ.
μλ‘μ΄ νμ΄μ§λ₯Ό μμ²ν λλ§λ€ μ 체 νμ΄μ§λ₯Ό λ€μ λ λλ§νκΈ° λλ¬Έμ΄λ€.
2. νμ΄μ§ μ΄λ μ λΆνμν ν νλ¦Ώλ μ€λ³΅ν΄μ λ‘λ© (μ±λ₯)
3. μλ² λ λλ§μ λ°λ₯Έ λΆν
4. λͺ¨λ°μΌ μ± κ°λ° μ μΆκ°μ μΈ λ°±μλ μμ νμ (μμ°μ±)κ°λ°μ΄ 볡μ‘ν΄μ§ μ μλ€.