Redux
리λμ€λ μ΄λ ΅λ€...
Redux?
μ»΄ν¬λνΈκ° λ§μμλ‘ λ³΅μ‘ν΄μ§λ μνλ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νλ λΌμ΄λΈλ¬λ¦¬
why?
κ΅¬μ‘°κ° μ μ 볡μ‘ν΄μ§λ©΄μ λΆλͺ¨ μ»΄ν¬λνΈλΆν° μ΅νμ μ»΄ν¬λνΈκΉμ§ λ΄λ €μ€λ©΄μ μνλ₯Ό κ΄λ¦¬νλ κ²μ λ무 λΉν¨μ¨μ !
리λμ€λ‘ λ°κΉ₯μμ μνκ΄λ¦¬λ₯Ό ν΄μ£Όλ©΄μ ν¨μ¨μ μΌλ‘ μ κ·Ό!
μ΄ν΄κ° λμ§ μλλ€λ©΄ μλμ κ°μ μν©μ 보μ!
π
μμ μ»΄ν¬λνΈ κ΅¬μ‘°κ° μλμ μ»΄ν¬λνΈκ΅¬μ‘°μ κ°μ΄ 볡μ‘ν΄μ‘λ€κ³ κ°μ ν΄λ³΄μ.
μ΄λ΄ κ²½μ°, μ΅νμ μμ μ»΄ν¬λνΈκΉμ§ μνλ₯Ό μ λ¬ν΄μ£Όκ±°λ μμ μ»΄ν¬λνΈμμ λ°μν μ΄λ²€νΈμ μν΄μ λ€λ₯Έ 루νΈμ μλ μ»΄ν¬λνΈμ μνλ³νλ₯Ό λΆλ¬μΌμΌμΌμΌνλ μνμΌ κ²½μ°μΌ λ λΉν¨μ¨μ μΌλ‘ μλνλ κ²μ λ³Ό μ μλ€.
How?
μμ μ κ° λ¬Έμ λ‘ μ μνλ μν©λ€μ 리λμ€λ λ°κΉ₯μμ μνκ΄λ¦¬λ₯Ό ν μ μλλ‘ λμμ€
리λμ€λ μ€ν μ΄λ₯Ό μ¬μ©νμ¬ μνλ₯Ό μ»΄ν¬λνΈ κ΅¬μ‘° λ°κΉ₯μ λκ³ μ€ν μ΄λΌλ μ€κ°μλ₯Ό ν΅ν΄ μνλ₯Ό μ λ°μ΄νΈνκ±°λ, μλ‘μ΄ μνλ₯Ό μ λ¬λ°μΌλ©° μ΄λ£¨μ΄μ§λ€.
About Redux?
κ·Έλ λ€λ©΄ μ΄μ 리λμ€κ° 무μμ΄κ³ μ μ°λμ§ λλ΅μ μΈ μ΄ν΄κ° λμκ²μ΄λ€.
λ€μ 리λμ€μ λν΄μ μ’ λ κΉμ΄ μ΄ν΄ν΄λ³΄λλ‘ νμ!
μλ νλ‘ νΈμλ μνκ³μ MVC ν¨ν΄μ΄ λμΈμλ€κ³ νλ€.
λ€λ€ κ°λ°κ³΅λΆλ₯Ό νλ©΄μ MVCν¨ν΄μ λν΄μ λ§μ΄ λ€μ΄λ΄€μκ±°λΌκ³ μκ°λλ€.
MVC ν¨ν΄μ μμ ꡬ쑰λμ²λΌ λ°μ΄ν°μ μλ°©ν₯μ νλ¦μ κ°μ§κ³ μλ€.
νμ§λ§, μ΄λ¬ν νλ¦μ λ°μ΄ν°μ λ³νκ° κ°ν΄μ‘μ λ λ³νκ° μμͺ½μΌλ‘ μΌμ΄λκΈ° λλ¬Έμ μ€νλ € 볡μ‘ν¨μ λΆλ¬μ¨λ€.
μ΄ μ μ 보μν΄μ λμ¨ κ²μ΄ λ°λ‘ Flux!
Fluxλ λ°μ΄ν°κ° λ¨λ°©ν₯μΌλ‘ νλ¬κ°λ νλ¦μ κ°μ§κ³ μλ€. μΌμ μ₯μμμλ§ λ°μ΄ν°λ₯Ό λ³νμν¬μ μκΈ° λλ¬Έμ μ½λνμ μ λ μ©μ΄νλ€λ μ₯μ μ κ°μ§κ³ μκ³ , 리μ‘νΈμμ μ΄λ° ν¨ν΄μ μ§ν₯νκ³ μλ€.
Reduxλ Fluxλ₯Ό κΈ°λ°μΌλ‘ νκΈ° λλ¬Έμ μ 체μ μΈ ν¨ν΄μ λμΌνλ€.
μνκ°μ Storeμμ κ΄λ¦¬λκ³ , Reducerλ₯Ό ν΅ν΄μλ§ μλ‘μ΄ μνλ₯Ό λ°μ μ μλ ꡬ쑰μ΄λ€.
Reduxλ₯Ό μ¬μ©ν λ 3κ°μ§ κ·μΉ
- λ¨μΌ μ€ν μ΄ μ¬μ©
νλμ μ΄ν리μΌμ΄μ μμλ νλμ μ€ν μ΄λ§ κ°λ₯!
μ±μ λͺ¨λ μνλ ν μ₯μ(store)μ μ μ₯ - μνλ 무쑰건 μ½κΈ° μ μ©
λΆλ³μ±μ μ§λ₯Ό μν΄μ μ‘μ μ ν΅ν΄μλ§ λ³κ²½ν μ μλλ‘ νλ€. - 리λμλ μμν ν¨μμ΄μ΄μΌν¨
λμΌν μ λ ₯μ λ°μμ λ μΈμ λ λμΌν μΆλ ₯μ λ΄λ ν¨μ
Math.random()μ΄λ λ€νΈμν¬μ μμ²μ νλ μμ κ³Ό κ°μ ν¨μ μ¬μ©X
리λμ€ κ°λ
Action μ‘μ
μνμ μ΄λ ν λ³νκ° νμνλ©΄ μ‘μ λ°μ!
νλμ κ°μ²΄λ‘ νν
μ‘μ κ°μ²΄λ λ°λμ typeνλλ₯Ό κ°μ§κ³ μμ΄μΌνλ€.
{
type: "ADD_TODO",
data: {
id: 0,
text: "redux"
}
}
μ‘μ μμ±ν¨μ
μ‘μ μμ±ν¨μλ μ‘μ κ°μ²΄λ₯Ό λ§λ€μ΄ μ£Όλ ν¨μ
function addTodo(data) {
return {
type: "ADD_TODO",
data
};
}
//νμ΄νν¨μ
const changeInput = text => ({
type: 'CHANGE_INPUT',
text
});
λ³νκ° μΌμ΄λ λλ§λ€ μ‘μ κ°μ²΄λ₯Ό λ§λ€μ΄μΌ νλλ° λ§€λ² μ‘μ κ°μ²΄λ₯Ό μμ±νκΈ° λ²κ±°λ‘κΈ° λλ¬Έμ ν¨μλ‘ λ§λ€μ΄μ κ΄λ¦¬νλ€.
Reducer 리λμ
리λμλ λ³νλ₯Ό μΌμΌν€λ ν¨μ
μ‘μ λ§λ€κΈ° -> λ³ν -> μ‘μ λ°μ -> 리λμκ° νμ¬μνμ μ λ¬λ°μ μ‘μ κ°μ²΄λ₯Ό νλΌλ―Έν°λ‘ λ°μ -> λκ°μ μ°Έκ³ ν΄μ μλ‘μ΄ μνλ₯Ό λ°ν
function reducer(state, action) {
...
return alteredState;
}
Store μ€ν μ΄
νλ‘μ νΈμ 리λμ€λ₯Ό μ μ©νκΈ° μν΄μ μ€ν μ΄λ₯Ό λ§λ λ€.
1νλ‘μ νΈ 1μ€ν μ΄
μ€ν μ΄ μμ νμ¬ μ± μνμ 리λμκ° λ€μ΄μκ³ , κ·Έλ¦¬κ³ λͺκ°μ§μ λ΄μ₯ν¨μλ₯Ό ν¬ν¨νκ³ μλ€.
Subscribe ꡬλ
μ€ν μ΄μ λ΄μ₯ν¨μ μ€ νλ
ꡬλ ν¨μμμ 리μ€ν° ν¨μλ₯Ό νλΌλ―Έν°λ‘ λ£μ΄μ νΈμΆ -> ν¨μκ° μ‘μ μ΄ λμ€νμΉλΌμ μ λ°μ΄νΈλ λλ§λ€ νΈμΆλ¨
const listener = () => {
console.log('μνκ° μ
λ°μ΄νΈλ¨');
}
const unsubscribe = store.subscribe(listener);
unsubscribe(); //μΆν ꡬλ
μ λΉνμ±νν λ ν¨μ νΈμΆ
Dispatch λμ€ν¨μΉ
λμ€ν¨μΉλ μ€ν μ΄μ λ΄μ₯ ν¨μ μ€ νλμ΄λ€.
μ‘μ μ λ°μμν€λ κ²!
λμ€ν¨μΉκ° μ‘μ μ λ°μμμΌ μ€ν μ΄μκ² μνλ³νκ° νμνλ€κ³ μλ¦Ό
λμ€ν¨μΉκ° νΈμΆλλ©΄ μ€ν μ΄λ 리λμ ν¨μλ₯Ό μ€νμμΌμ μλ‘μ΄ μνλ₯Ό λ§λ€μ΄ μ€λ€.
μ°Έκ³
리μ‘νΈλ₯Ό λ€λ£¨λ κΈ°μ
https://velog.io/@j35148/Redux-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
https://velog.io/@youthfulhps/What-is-Redux-and-why-use-it