μ¬μ΄λ μ΄ννΈλ ν¨μ (λλ μ»΄ν¬λνΈ)μ μ
λ ₯ μΈμλ ν¨μμ κ²°κ³Όμ μν₯μ λ―ΈμΉλ μμΈμ λ»νλ€.
ex) APIνΈμΆκ³Ό κ°μ λ€νΈμν¬ νΈμΆ
λ‘컬 - νΉμ μ»΄ν¬λνΈ μμμλ§ κ΄λ¦¬λλ μν
μ μ - νλ‘λνΈ μ 체 νΉμ 볡μμ μ»΄ν¬λνΈμμ κ΄λ¦¬λλ μν
μλ°μ€ν¬λ¦½νΈμμ μ μ λ³μλ₯Ό λ¨μ©νλ©΄ μ’μ§ μμ§λ§ μ¬μ©ν΄μΌν λκ° μλ κ² μ²λΌ μ μ μν μμλ μ¬μ©ν΄μΌν λκ° μλ€.
λνμ μΈ μκ° κ°μ μνλ ν μΆμ²μμ λμμΌ νλ€λ μμΉμ μ§ν¬λμΈλ°, κ°μ μνλ₯Ό λ€λ₯Έ μΆμ²μμ λ°μμ¬ κ²½μ°, μ΄ λ³λμ λ μνλ₯Ό λκΈ°ν(sync)νλ κ³Όμ μ΄ μΆκ°μ μΌλ‘ λ°μνκ³ μ΄ κ³Όμ μμ μΆκ°μ μΈ λ¬Έμ κ° λ°μν μ μκΈ°μ μ μ μνλ‘ νλ²μ κ΄λ¦¬ν΄μ£Όλ κ²μ΄λ€.
μ΄λ₯Ό μ‘°κΈ μ΄λ €μ΄ λ§λ‘ λ°μ΄ν° 무결μ±μ μν΄ λμΌ λ°μ΄ν°λ νμ λμΌν κ³³μμ κ°μ§κ³ μ€λλ‘νλ€κ³ νκ³ , μ΄λ₯Ό μν λ°©λ²λ‘ μ Single Source of Truth(μ λ’°ν μ μλ λ¨μΌ μΆμ²)μμΉμ΄λΌ νλ€.
μ μμΌλ‘ μνλ₯Ό κ΄λ¦¬νλ μ
1. λΌμ΄νΈ λͺ¨λ, λ€ν¬ λͺ¨λ ν
λ§μ€μ
2. μ±μ μΈμ΄μ€μ
μ΄λ κ² μ μ μνλ₯Ό μ¬μ©ν λ, κ΄λ¦¬νκ² νΈνκ² ν΄μ£Όλ λΌμ΄λΈλ¬λ¦¬κ° μλλ°, λνμ μΈ λΌμ΄λΈλ¬λ¦¬ μΈκ°μ§κ° React Context, Redux, MobX μ΄λ©° Reduxλ₯Ό 곡λΆν΄λ³΄λ €νλ€.
μ΄ λΌμ΄λΈλ¬λ¦¬λ€μ λνμ μΈ κΈ°λ₯μ μ μ μνλ₯Ό μν μ μ₯μλ₯Ό μ 곡νλ κ²μ΄λ€.
μ΄λ‘ μΈν΄ props drilling λ¬Έμ λ±μ ν΄κ²°ν μ μλ€.
μ¬κΈ°μ props drillingμ΄λ, μλ‘ A μ»΄ν¬λνΈμ μλ μνλ₯Ό Aμ μμ μ»΄ν¬λνΈμΈ Bμ μμ μ»΄ν¬λνΈμΈ Cμμ νμ©νκ³ μΆμλ, Bλ ν΄λΉ μνκ° νμμμμλ Cλ‘ props ν΄μ€μΌ νλ―λ‘ Aλ‘λΆν° μνλ₯Ό λ°μμμΌνλ€. μ¬κΈ°μ Cκ° Aλ‘λΆν° μ λ¬λλ μνλ₯Ό λ°λ κ²μ΄ μλ, μ μ μνμμ λ°κ²λλ€λ©΄ ν΄λΉ λ¬Έμ κ° ν΄κ²°λλ€.
리λμ€λ μνλ₯Ό νΈνκ² κ΄λ¦¬νκ² λμμ£Όλ λνμ μΈ λΌμ΄λΈλ¬λ¦¬μ΄λ€.
storeλ dataλ₯Ό μ μ₯νλ κ³³μ΄λ€.
createStore()
λ 리λμ€μ λ©μλμ΄κ³ λ°μ΄ν°λ₯Ό μ°Ύκ³ μμ νλ reducer
ν¨μλ₯Ό μΈμλ‘ μꡬνλ€. κ·Έλ¦¬κ³ μ΄ store μμ dataλ reducer
ν¨μλ₯Ό ν΅ν΄μλ§ μμ ν μ μλ€.
μ΄ λ¦¬λμκ° λ¦¬ν΄νλ κ²μ΄ λ°μ΄ν°κ° λκ³ , 리λμκ° μΈμλ‘ μλ createStoreμ μΈμ€ν΄μ€μμ getState()λ₯Ό μ΄μ©ν΄ μν κ°μ λ°μμ¬ μ μλ€.
import {createStore} from 'redux';
const reducer = () => {
return 'hello'
}
const store = createStore(reducer);
console.log(store.getState()) // 'hello'
리λμμ 첫λ²μ§Έ μΈμλ‘λ ν΄λΉ 리λμκ° λ€λ£° λ°μ΄ν°κ° λ³μλ‘ λ€μ΄κ°κ³ λλ²μ§Έ μΈμλ‘λ action
μ΄ μ€λλ° μ΄ ν΄λΉ μΈμλ κ°μ²΄ ννλ‘ dispatch({type:'value'}) λ©μλ
λ₯Ό μ΄μ©ν΄ 리λμ μμμ κ°μ²΄ action
μ ν΅ν΄ λ°μ΄ν°λ₯Ό μ¬μ©νκ² ν μ μλ€.
μμ κ°μ΄ store.dispatch({type: 'value'})
μ κ°μ΄ μ¬μ©νλ€λ©΄, 리λμ μμμ action κ°μ²΄ μμ ν€κ° type
μ΄κ³ κ°μ΄ 'value'
μΈ νλ‘νΌν°κ° μκΈ°λ κ²μ΄λ€.
κ·Έλ¦¬κ³ dispatch
ν΄μ€λ νμtype
μ΄λΌλ ν€ κ°μ΄ μμ΄μΌνλ€.
import {createStore} from 'redux';
const reducer = (data, action) => {
data = action.type
return data;
}
const store = createStore(reducer);
store.dispatch({type: 'hello'});
console.log(store.getState()) // 'hello'
subscribe
λ μΈμλ‘ μ½λ°±ν¨μλ₯Ό λ°λ createStore
μ λ©μλμ΄λ€.
λ©μλλ₯Ό μ¬μ©ν createStore μΈμ€ν΄μ€λ₯Ό κ°μνλ©° ν΄λΉ μΈμ€ν΄μ€μ λ°μ΄ν°μ λ³νκ° μκ²Όμλ κ°μ§κ³ μλ μ½λ°±ν¨μλ₯Ό μ€νμν¨λ€.
import {createStore} from 'redux';
const reducer = (data, action) => {
data = action.type
return data;
}
const store = createStore(reducer);
store.subscribe(()=>{
console.log(store.getState())
})
store.dispatch({type: 'hello'}); // 'hello'
// dispatch μμΌμ€μΌλ‘ reducer ν¨μκ° νΈμΆλκ³ κ²°κ³Όμ μΌλ‘ storeμ λ°μ΄ν°κ° λ³νλ€.
// subscribe λ©μλλ‘ storeλ₯Ό κ°μμ€μ΄μμΌλ―λ‘ λ°λλ μκ°μ μ½λ°±ν¨μκ° μ€νλκ³
// μ μ₯λ λ°μ΄ν°κ° μ½μμ λ‘κ·Έλ‘ λ¨λλ€.
const reducer = (data, action) =>{
switch(action.type){
case "name":
return data = 'sunghoon';
case "future-job":
return data = 'dev';
}
}
const reducer = (data, action) => {
if(action.type === 'name'){
return data = 'sunghoon';
} else if(action.type === 'future-job'){
return data = 'dev'
}
}
μ΄ λ 리λμλ κ°λ€.
리λμ€ κ³΅λΆν λΆλΆ - https://nomadcoders.co/