-
React Reduxκ³΅λΆ 2022. 7. 6. 22:17λ°μν
Reduxλ? π
리λμ€λ 리μ‘νΈμμ κ°μ₯ λ§μ΄ μ¬μ©λλ μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬λ€. 리λμ€λ₯Ό μ¬μ©νλ©΄ μ»΄ν¬λνΈμ μν μ λ°μ΄νΈ κ΄λ ¨ λ‘μ§μ λ€λ₯Έ νμΌλ‘ λΆλ¦¬μμΌμ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μλ€.
Redux κΈ°λ³Έ μ©μ΄ π£
- μ‘μ (Action)
μν λ³νκ° νμνλ€λ©΄ μ‘μ μ μΌμΌμΌμΌ νλ€. μ‘μ μ κ°μ²΄λ‘ ννλλ©°, type νλλ₯Ό λ°λμ κ°μ§κ³ μμ΄μΌνλ€.
{ type: 'ADD_TODO', data: { id: 1, text: '리λμ€ λ°°μ°κΈ°' } }
2. μ‘μ μμ±ν¨μ(Action Creator)
μ‘μ μμ± ν¨μλ μ‘μ κ°μ²΄λ₯Ό λ§λ€μ΄μ£Όλ ν¨μλ€. νμ΄ν ν¨μλ‘λ νν κ°λ₯νλ€.
function addTodo(data) { return { type: 'ADD_TODO', data, } }
3. 리λμ(Reducer)
리λμλ₯Ό νκ΅μ΄λ‘ ν΄μν΄λ³΄λ©΄ λ³νλ₯Ό μΌμΌν€λ κ²μ λ§νλ€. 리λμλ νμ¬ μνμ μ‘μ κ°μ²΄λ₯Ό λ°μ, νμνλ€λ©΄ μλ‘μ΄ μνλ₯Ό 리ν΄νλ ν¨μλ€. μ‘μ μ νμ κΈ°λ°μΌλ‘ μ΄λ²€νΈλ₯Ό μ²λ¦¬νλ μ΄λ²€νΈ 리μ€λλΌκ³ μκ°νλ©΄ λλ€.
const count = 1 // Reducerλ₯Ό μμ±ν λμλ μ΄κΈ° μνλ₯Ό μΈμλ‘ μꡬν©λλ€. const counterReducer = (state = count, action) { // Action κ°μ²΄μ type κ°μ λ°λΌ λΆκΈ°νλ switch 쑰건문μ λλ€. switch (action.type) //action === 'INCREASE'μΌ κ²½μ° case 'INCREASE': return state + 1 // action === 'DECREASE'μΌ κ²½μ° case 'DECREASE': return state - 1 // action === 'SET_NUMBER'μΌ κ²½μ° case 'SET_NUMBER': return action.payload // ν΄λΉ λλ κ²½μ°κ° μμ λ κΈ°μ‘΄ μνλ₯Ό κ·Έλλ‘ λ¦¬ν΄ default: return state; } // Reducerκ° λ¦¬ν΄νλ κ°μ΄ μλ‘μ΄ μνκ° λ©λλ€.
4. μ€ν μ΄(Store)
μ€ν μ΄μλ μνκ° λ€μ΄μλ€. νλμ νλ‘μ νΈλ νλμ μ€ν μ΄λ§ κ°μ§ μ μλ€.
import { createStore } from 'redux'; const store = createStore(rootReducer);
5. λμ€ν¨μΉ(Dispatch)
μ€ν μ΄ λ΄μ₯ ν¨μ μ€ νλμΈ λμ€ν¨μΉλ μ‘μ κ°μ²΄λ₯Ό λ겨μ€μ μνλ₯Ό μ λ°μ΄νΈ νλ μ μΌν λ°©λ²μ΄λ€. μ΄λ²€νΈ νΈλ¦¬κ±°λΌκ³ μκ° ν μ μλ€.
// Action κ°μ²΄λ₯Ό μ§μ μμ±νλ κ²½μ° dispatch( { type: 'INCREASE' } ); dispatch( { type: 'SET_NUMBER', payload: 5 } ); // μ‘μ μμ±μ(Action Creator)λ₯Ό μ¬μ©νλ κ²½μ° dispatch( increase() ); dispatch( setNumber(5) );
Reducx Hooks π£
Reactμμ Reduxλ₯Ό μ¬μ©ν λ νμ©ν μ μλ Hooks λ©μλλ₯Ό μ 곡
- useSelector()
μ»΄ν¬λνΈμ stateλ₯Ό μ°κ²°νμ¬ Reduxμ stateμ μ κ·Ό ν μ μκ² ν΄μ£Όλ λ©μλλ€.
// Redux Hooks λ©μλλ 'redux'κ° μλλΌ 'react-redux'μμ λΆλ¬μ΅λλ€. import { useSelector } from 'react-redux' const counter = useSelector(state => state.counterReducer) console.log(counter) // 1
- useDispatch()
Action κ°μ²΄λ₯Ό Reducerλ‘ μ λ¬ν΄ μ£Όλ λ©μλ. μμμ Dispatchλ₯Ό μ€λͺ ν λ μ¬μ©ν dispatch ν¨μλ useDispatch()λ₯Ό μ¬μ©ν κ².
import { useDispatch } from 'react-redux' const dispatch = useDispatch() dispatch( increase() ) console.log(counter) // 2 dispatch( setNumber(5) ) console.log(counter) // 5
Reduxμ μΈκ°μ§ μμΉ π£
- Single source of truth
- λμΌν λ°μ΄ν°λ νμ κ°μ κ³³μμ κ°μ§κ³ μμΌ νλ€λ μλ―Έμ λλ€. μ΄λ κ² νλ©΄ μ ν리μΌμ΄μ μ λλ²κΉ μ΄ μ¬μμ§κ³ μλ²μμ μ§λ ¬νκ° λ μ μκ³ μ½κ² ν΄λΌμ΄μΈνΈμμ λ°μ΄ν°λ₯Ό λ°μλ€μ¬μ¬ μ μκ² λλ€.
- State is read-only
- μνλ μ½κΈ° μ μ©μ΄λΌλ λ»μΌλ‘, Reactμμ μνκ°±μ ν¨μλ‘λ§ μνλ₯Ό λ³κ²½ν μ μμλ κ²μ²λΌ, Reduxμ μνλ μ§μ λ³κ²½ν μ μμμ μλ―Έν©λλ€. μ¦, Action κ°μ²΄κ° μμ΄μΌλ§ μνλ₯Ό λ³κ²½ν μ μμκ³Ό μ°κ²°λλ μμΉμ λλ€.
- Changes are made with pure functions
- 리λμ ν¨μλ μ΄μ μνμ μ‘μ κ°μ²΄λ₯Ό νλΌλ―Έν°λ‘ λ°λλ€.
- νλΌλ―Έν° μΈμ κ°μλ μμ‘΄νλ©΄ μλλ€.
- μ΄μ μνλ μ λλ‘ κ±΄λλ¦¬μ§ μκ³ , λ³νλ₯Ό μ€ μλ‘μ΄ μν κ°μ²΄λ₯Ό λ§λ€μ΄μ λ°ννλ€.
- λκ°μ νλΌλ―Έν°λ‘ νΈμΆλ 리λμ ν¨μλ μΈμ λ λκ°μ κ²°κ³Ό κ°μ λ°νν΄μΌ νλ€.
- μ±μ μ¬λ¬ μμΉμμ νμν λ§μ μμ μνλ€μ΄ μ‘΄μ¬ν λ (μ μ μνκ° νμνλ€κ³ λκ»΄μ§ λ)
- μνλ€μ΄ μμ£Ό μ λ°μ΄νΈ λ λ
- μνλ₯Ό μ λ°μ΄νΈ νλ λ‘μ§μ΄ 볡μ‘ν λ
- μ±μ΄ μ€κ° λλ ν° μ¬μ΄μ¦μ μ½λλ₯Ό κ°κ³ μκ³ λ§μ μ¬λλ€μ μν΄ μ½λκ° κ΄λ¦¬λ λ
- μνκ° μ λ°μ΄νΈλλ μμ μ κ΄μ°°ν νμκ° μμ λ
- λ³νλ₯Ό μΌμΌν€λ 리λμ ν¨μλ μμν ν¨μμ¬μΌ νλ€. μμ ν¨μλ λ€μκ³Ό κ°μ 쑰건μ λ§μ‘±νλ€.
λ°μν'곡λΆ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CSS] κΈ°μ΄ (0) 2022.07.05 Unit4 - [HTML] κΈ°μ΄ (0) 2022.07.04 [JavaScript] κΈ°μ΄ μ μ΄λ¬Έ2 (0) 2022.07.01 [JavaScript] κΈ°μ΄ (0) 2022.06.30 22.04.25 Learn how to learn (0) 2022.06.29