ν¨μ¨μ μΌλ‘ μνκ΄λ¦¬λ₯Ό ν΄μ€ μ μλ λΌμ΄λΈλ¬λ¦¬
리λμ€(Redux)
λ 리μ‘νΈμλ§ μ’
μλλ λΌμ΄λΈλ¬λ¦¬κ° μλμμ! κ·Έλμ λ€λ₯Έ UI λΌμ΄λΈλ¬λ¦¬λ νλ μμν¬μλ ν¨κ» μ¬μ©ν μ μμ΅λλ€.
μνμ λ³νκ° νμν λ λ°μ
μ‘μ
(action)
μ type
μ νμ μμ±μΌλ‘ κ°μ§κ³ μμ΄μΌ νλλ°μ! μ΄ μΈμ λ€λ₯Έ μμ±λ€μ μμ λ‘κ² μΆκ°ν΄μ€ μ μμ΅λλ€.
μλ μ½λμμλ type
κ³Ό todo
κ°μ²΄λ₯Ό λ§λ€μ΄ μΆκ°ν΄μ£Όμμ΅λλ€.
{
type: "ADD_TODO",
todo: {
id: 0,
text: "리λμ€ κ³΅λΆ μμ!"
}
}
μ‘μ (Action)
μ μμ±ν΄μ£Όλ ν¨μ
μ‘μ
μμ± ν¨μ(Action Creator)
λ νλΌλ―Έν°λ₯Ό λ°μμ μ‘μ
κ°μ²΄ ννλ‘ λ§λ€μ΄μ£Όλ μΌμ νλλ°μ.
μλ AddTodo
λΌλ μ‘μ
μμ± ν¨μλ todo
맀κ°λ³μλ₯Ό λ°μμ μ‘μ
μ μμ±νμ¬ μ€λλ€.
export const AddTodo = (todo) => {
return {
type : 'ADD_TODO',
todo
};
};
μ‘μ μμ± ν¨μλ₯Ό μ¬μ©νμ§ μκ³ λ μ‘μ μ λ°μμν¬ λλ§λ€ μ‘μ κ°μ²΄λ₯Ό μ§μ μμ±νμ¬ μ¬μ©ν μ μμ΅λλ€.
λ³νλ₯Ό μΌμΌν€λ ν¨μ
state
μaction
λ κ°μ μΈμ λ°μ
리λμ(Reducer)
λ μ λ¬λ°μ μΈμλ₯Ό μν(state)
μ μ‘μ
(action)
μ μ°Έκ³ ν΄ μλ‘μ΄ μνλ₯Ό λ°νν΄μ€λλ€.
μλ μ½λλ TodoReducer
μ½λμΈλ°μ! μν(state)
μ μ‘μ
(action)
μ λ°μ μ‘μ
νμ
μ λ°λΌ ν΄λΉ μ½λλ₯Ό μ€νν©λλ€.
function TodoReducer(state, action) {
switch (action.type) {
case 'ADD_TODO':
return {
...state,
todos: state.todos.concat({ id: id++,text: payload.text})
};
default:
return state;
}
}
νμ¬ μ ν리μΌμ΄μ μ μνμ 리λμ(Reducer) μ€ν μ΄μ λ΄μ₯ ν¨μλ₯Ό ν¬ν¨
리λμ€(Redux)
μμλ μ ν리μΌμ΄μ
νλλΉ νλμ μ€ν μ΄(Store)
λ₯Ό λ§λ€ μ μλλ°μ!
μ€ν μ΄(Store)μ λ΄μ₯ ν¨μ μ€ νλ
μ‘μ μ λ°μμν€λ μν
λμ€ν¨μΉ(Dispatch)
μλ μ‘μ
(Action)
μ νλΌλ―Έν°λ‘ μ λ¬ν©λλ€.
μ€ν μ΄(Store)μ λ΄μ₯ ν¨μ
ν¨μ ννμ κ°μ ν¨μμ μΈμλ‘ λ°μ
ꡬλ
(Subscribe)
μ νΉμ ν¨μλ₯Ό μ λ¬ν΄μ£Όλ©΄, μ‘μ
μ΄ λμ€ν¨μΉ(Dispatch)λ λλ§λ€ μ λ¬ν΄μ€ ν¨μλ₯Ό νΈμΆν΄μ€λλ€.
μ¬λ¬κ°μ μ€ν μ΄ λ§λ€μ΄ μ¬μ©ν μ μμ§λ§ κΆμ₯λμ§ μλ λ°©λ²μ΄ μλκΈ° λλ¬Έμ μ€ν μ΄λ νλλ§ μ¬μ©νλκ² μ’μ΅λλ€.
κΈ°μ‘΄μ μνλ μ μ§νκ³ μλ‘μ΄ μνλ₯Ό μ λ°μ΄νΈν΄μ£Όλ λ°©μμ μ¬μ©ν¨μΌλ‘μ¨ κ°λ°μ λꡬλ₯Ό ν΅ν΄ Undo/Redoκ° κ°λ₯ν©λλ€. μ λλ‘ μ§μ μμ νμ§ λ§μμΌ ν©λλ€.
μμ ν¨μμ λ°ν κ°μ μ λ¬λ°μ νλΌλ―Έν°μλ§ μμ‘΄ν΄μΌ νλ©°, κ°μ νλΌλ―Έν°μ κ²°κ³Όκ°μ νμ λμΌν΄μΌ ν©λλ€. 리λμ λν λκ°μ νλΌλ―Έν°λ₯Ό μ λ¬λ°μ νΈμΆλλ€λ©΄ κ²°κ³Όκ°μΌλ‘ κ°μ κ°μ λ°νν΄μΌ ν©λλ€.
λ€μ ν¬μ€ν μμλ 리λμ€λ₯Ό μ μ©ν todolistλ₯Ό λ§λ€μ΄ 보λλ‘ νκ² μ΅λλ€!