π‘ Fluxλ? μ νμν κΉ?
λ¨λ°©ν₯ λ°μ΄ν° νλ¦μ ν΅ν μμΈ‘ κ°λ₯ν μν κ΄λ¦¬ ꡬ쑰
π§ Fluxλ?
Fluxλ Reactμ ν¨κ» μμ£Ό μΈκΈλλ ν΄λΌμ΄μΈνΈ μ¬μ΄λ μν€ν
μ² ν¨ν΄μ
λλ€.
λ¨λ°©ν₯ λ°μ΄ν° νλ¦μ κΈ°λ°μΌλ‘ μνλ₯Ό μμΈ‘ κ°λ₯νκ² κ΄λ¦¬ν μ μλλ‘ μ€κ³λμμ΅λλ€.
Fluxλ νλ μμν¬κ° μλ κ°λ μ μΈ κ΅¬μ‘°μ λλ€.
β Fluxλ μ λ±μ₯νμκΉ?
κΈ°μ‘΄ MVC ν¨ν΄μ νκ³
- λͺ¨λΈκ³Ό λ·° μ¬μ΄μ μλ°©ν₯ λ°μ΄ν° νλ¦
- μνκ° μ¬λ¬ κ³³μ ν©μ΄μ Έ μμ
- μ»΄ν¬λνΈ κ° μμ‘΄μ± μ¦κ°
- μ μ§λ³΄μμ λλ²κΉ μ΄λ €μ
π μμλ‘ μ½κ² μ΄ν΄ν΄λ³΄κΈ°
μν©: μ¬μ©μμκ² μλ‘μ΄ μλ¦Όμ΄ λμ°©νμ΅λλ€.
ν€λμ μλ¦Ό μμ΄μ½μ΄ μκ³ , λͺ©λ‘ νμ΄μ§μμλ μλ¦Όμ νμΈν μ μμ΄μΌ ν©λλ€.
β κΈ°μ‘΄ λ°©μ
- μλ¦Όμ μ½μΌλ©΄ ν€λμ λͺ©λ‘ μνλ₯Ό κ°κ° μ λ°μ΄νΈ
- μ¬λ¬ μ»΄ν¬λνΈμμ μνκ° μ€λ³΅ κ΄λ¦¬λ¨
β Flux λ°©μ
- Actionμ λ°μμν€κ³
- Dispatcherκ° μ΄λ₯Ό μ λ¬
- Storeκ° μνλ₯Ό λ³κ²½
- View(μ»΄ν¬λνΈ)λ Storeλ₯Ό ꡬλ
// μμ: μλ¦Ό μ½κΈ° μ‘μ
dispatch({ type: 'MARK_AS_READ', payload: { id: 123 } });
// Storeμμ μ²λ¦¬νλ reducer
function notificationsReducer(state, action) {
switch (action.type) {
case 'MARK_AS_READ':
return state.map(n =>
n.id === action.payload.id ? { ...n, read: true } : n
);
default:
return state;
}
}
π Fluxμ λ°μ΄ν° νλ¦
[View] → (Action λ°μ)
↓
[Dispatcher] → (Action μ€κ³)
↓
[Store] → (μν λ³κ²½ λ° Viewμ μλ¦Ό)
↓
[View]
λͺ¨λ μν λ³κ²½μ μ€μ§ Action → Storeλ₯Ό ν΅ν΄μλ§ μΌμ΄λλ©°, μ»΄ν¬λνΈ κ° μ§μ νΈμΆμ μμ΅λλ€.
π MVC vs Flux
νλͺ© | MVC (μλ°©ν₯) | Flux (λ¨λ°©ν₯) |
---|---|---|
μν λ³κ²½ | μ»΄ν¬λνΈ κ° μ§μ νΈμΆ | Action → Store |
μ μ§ λ³΄μ | 볡μ‘, λ²κ·Έ λ§μ | μμΈ‘ κ°λ₯, μΆμ μ¬μ |
ν μ€νΈ μ©μ΄μ± | UI μμ‘΄ λμ | μνλ§ ν μ€νΈ κ°λ₯ |
β Fluxμ μ₯μ
- μν λ³κ²½ νλ¦μ΄ λͺ ννκ³ μμΈ‘ κ°λ₯
- Storeλ§ ν μ€νΈνλ©΄ λλ―λ‘ μ λ ν μ€νΈ μ©μ΄
- μΈλΆ UIλ μνμ μν₯λ°μ§ μμ
- Reducerλ μμ ν¨μλ‘ κ΅¬μ± κ°λ₯
β Fluxμ λ¨μ
- κΈ°λ³Έ ꡬ쑰 ꡬνμλ λ§μ μ½λλ νμ
- νμ΅ κ³‘μ μ΄ κ°νλ¦
- λ¨μν νλ‘μ νΈμλ κ³Όλν μ μμ
βοΈ λ§λ¬΄λ¦¬
Fluxλ νΉν λκ·λͺ¨ SPAμμ κ°λ ₯ν μν κ΄λ¦¬ ν¨ν΄μ μ 곡ν©λλ€.
λͺ¨λ μν λ³κ²½μ΄ Actionμ ν΅ν΄ νλ₯΄κ³ , μ€μμ Storeμμ μνκ° κ΄λ¦¬λλ―λ‘
볡μ‘ν μ ν리μΌμ΄μ
μμλ μ μ§λ³΄μκ° μ¬μμ§λλ€.
π‘ μ°Έκ³ λ‘ Redux μμ μ΄ Flux μν€ν μ²λ₯Ό κΈ°λ°μΌλ‘ λ§λ€μ΄μ‘μ΅λλ€!