[리μ‘νΈ]리λμ€(Redux) λ 무μμΌκΉ? | 리λμ€λ₯Ό μ μ¬μ©ν κΉ?
π€ 리λμ€λ?
μ ν리μΌμ΄μ
μμ μνλ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μκ² λμμ£Όλ λꡬμ΄λ€.
볡μ‘ν μν κ΄λ¦¬κ° μ΄λ£¨μ΄μ§λ SPA(Single Page Application)μμ μ μ©νκ² μ¬μ©λλ€.
리λμ€λ 리μ‘νΈ λΏλ§ μλλΌ jQuery, Angular λ±μ μ¬μ©νλ μ ν리μΌμ΄μ
μμλ μ¬μ©ν μ μλ€.
λλ 리μ‘νΈμμ μ¬μ©νλ 리λμ€μ λν΄ μμλ³Ό κ²μ΄λ€ !
리μ‘νΈμ λ°μ΄ν° νλ¦μ λ¨λ°©ν₯μ΄κΈ° λλ¬Έμ, λΆλͺ¨ μ»΄ν¬λνΈ μμ μ‘΄μ¬νλ μμ μ»΄ν¬λνΈλ€μ λΆλͺ¨ μ»΄ν¬λνΈμ μνλ₯Ό propsλ‘ μ λ¬λ°κ² λλ€.
λΆλͺ¨ μ»΄ν¬λνΈμ μνκ°μ΄ λ³νκ² λλ©΄, μμ μ»΄ν¬λνΈλ λ³νλ μνμ λ§κ² dataλ uiλ₯Ό λ³κ²½νλ€. μ¦, 리λλλ§μ νλ€.
μ¬κΈ°μ! μ»΄ν¬λνΈλ λ€μκ³Ό κ°μ μν©μμ 리λλλ§ λλ€.
1. μμ μ μν(state)κ°μ΄ λ³κ²½λ λ
2. λΆλͺ¨ μ»΄ν¬λνΈκ° 리λλλ§λ λ
3. μμ μ΄ μ λ¬λ°μ propsκ°μ΄ λ³κ²½λ λ
4. κ°μ μ λ°μ΄νΈ ν¨μκ° μ€νλ λ
μ¦, μμ κ°μ μν©μμ λΆλͺ¨ μ»΄ν¬λνΈμ μνκ°μ΄ λ³νλ€λ©΄, λΆλͺ¨ μ»΄ν¬λνΈλ 리λλλ§ λ κ²μ΄κ³ , μμ μ»΄ν¬λνΈ λν 리λλλ§ λλ€.
π Reduxλ₯Ό μ°λ μ΄μ
1. λͺ¨λ μ»΄ν¬λνΈλ€μ΄ propsλ¬Έλ² μμ΄ stateλ₯Ό μ§μ κΊΌλ΄μΈ μ μμ -> λΆλͺ¨ μμ κ°μ λ°μ΄ν° μ λ¬μ νΈλ¦¬μ±μ μν΄
2. μν(state) κ΄λ¦¬μ μ©μ΄ -> storeμμ stateμμ λ°©λ²μ 미리 μ μν΄λλ€. μ»΄ν¬λνΈλ€μ μ§μ stateλ₯Ό μ§μ μμ νμ§ μκ³ μμ μμ²λ§ 보λ΄μ κ·Έλ₯ κ°μ Έμμ°λ©΄ λλ€.
π‘ μ₯μ
λ²κ·Έκ° μΌμ΄λ¬μ λ μΆμ μ΄ μ¬μ. λ²κ·Έκ° μκΈ°λ©΄ λ²μΈμ 무쑰건 store.jsμ.
μ¬κΈ°μ, μμμ λΆλͺ¨μ μνλ₯Ό λ§ λ³κ²½ν μ μλ€. propsλ¬Έλ²μ ν΅ν΄ μ λ¬λ°μ μνλ§μ λ³κ²½ν μ μλ€.
λ°λΌμ, μ»΄ν¬λνΈκ° 100κ° μ€μ²©ν΄μ μλ€λ©΄ stateλ₯Ό μ λ¬ν΄μ£ΌκΈ° μν΄ μμ²λκ² λ§μ propsλ¬Έλ²μ μ¬μ©ν΄μΌνλ€.
리λμ€λ₯Ό μ€μΉνλ©΄ μ΄ μμ μνλ€μ λ€ μ μ₯ν΄λμ΄ μ»΄ν¬λνΈκ° νμν λ κΊΌλ΄μΈ μ μλ€.
μ€μΉ
npm install redux
μΈν (μ΄ν΄ν νμ X, λ°©λ²μΌ λΏ)
: λͺΈλ¬΄κ² μ¦κ°λ₯Ό μλ‘ λ€μ΄ μ€λͺ νκ² λ€
import { Provider } from 'react-redux'
import { createStore } from 'redux'
function reducer(state = 100, action){
return state;
}
let store = createStore(reducer);
ReactDOM.render(
<React.StricMode>
<Provider store={store}>
<App/>
</Provider>
</React.StricMode>
document.getElementById('root')
);
π¨ μ»΄ν¬λνΈμμ storeμ μλ stateλ₯Ό μ°λ λ°©λ²
: useSelectorλ‘ λ¦¬λμ€μ stateλ₯Ό μ‘°ννλ€.
function App(){
const κΊΌλ΄μ¨κ±° = useSelect((state) => state);
}
index.js
: storeμ state μμ λ°©λ²μ 미리 μ μνλ€.
function reducer(state = 체μ€, action){
switch (action.type) {
case 'μ¦κ°':
return state + 1
case 'κ°μ':
return state - 1
default:
return state
}
}
μ»΄ν¬λνΈμμ state μμ μμ²νλ λ²
: dispatch μ¬μ©
const dispatch = useDispatch();
...
return (
<button onClick={()=>{ dispatch({type: 'μ¦κ°'}) }}>λνκΈ°</button>
)
ν΄λ¦λ§λ€ 1μ© μ¦κ°νκ² λλ€.
Vuexλ κ°μ κ°λ μΌλ‘ μκ°νλ©΄ λλ€ !
곡μλ¬Έμ
https://ko.redux.js.org/introduction/getting-started/
Redux μμνκΈ° | Redux
μκ° > μμνκΈ°: Reduxλ₯Ό λ°°μ°κ³ μ¬μ©νκΈ° μν μλ£
ko.redux.js.org