Redux
π μ μ
Reactμ ν¨κ» μ¬μ©λλ JavaScript μ ν리μΌμ΄μ
μ μν κ΄λ¦¬λ₯Ό μν μν 컨ν
μ΄λ λΌμ΄λΈλ¬λ¦¬μ΄λ€. 볡μ‘ν μν κ΄λ¦¬λ₯Ό μ©μ΄νκ² λ§λ€μ΄μ£Όλ©° Reduxμ μ£Όμ λͺ©νλ μ ν리μΌμ΄μ
μνλ₯Ό μμΈ‘ κ°λ₯νκ² λ§λ€μ΄μ κ΄λ¦¬ λ° λλ²κΉ
μ μ½κ² νκ³ , μν λ³νλ₯Ό ν¨μ¨μ μΌλ‘ μ²λ¦¬νλ κ²μ΄λ€.
βοΈνΉμ§
- Redux λ°μ΄ν° νλ¦
ACTION
Actionμ κ°λ¨ν JavaScript κ°μ²΄μ΄λ€. μ¬κΈ°μλ μ°λ¦¬κ° μννλ μμ
μ μ νμ μ§μ νλ 'type' μμ±μ΄ μμΌλ©° μ νμ μΌλ‘ redux μ μ₯μμ μΌλΆ λ°μ΄ν°λ₯Ό 보λ΄λ λ° μ¬μ©λλ 'payload' μμ±μ κ°μ§ μλ μλ€.
REDUCER
μ ν리μΌμ΄μ
μνμ λ³κ²½ μ¬νμ κ²°μ νκ³ μ
λ°μ΄νΈλ μνλ₯Ό λ°ννλ ν¨μμ΄λ€. μΈμλ‘ μ‘°μΉλ₯Ό μ·¨νκ³ store λ΄λΆμ μνλ₯Ό μ
λ°μ΄νΈνλ€.
Redux Store
μ΄λ€μ νλλ‘ λͺ¨μΌλ κ°μ²΄ μ μ₯μλ μ ν리μΌμ΄μ
μ μ 체 μν νΈλ¦¬λ₯Ό 보μ νλ€. λ΄λΆ μνλ₯Ό λ³κ²½νλ μ μΌν λ°©λ²μ ν΄λΉ μνμ λν Actionμ μ λ¬νλ κ²μ΄λ€. Redux Storeλ ν΄λμ€κ° μλλ©° λͺ κ°μ§ Methodsκ° μλ κ°μ²΄μΌ λΏμ΄λ€.
- Provider
Redux μ€ν μ΄λ₯Ό React μ ν리μΌμ΄μ
μ μ 곡νλ μ΅μμ μ»΄ν¬λνΈμ΄λ€. Providerλ₯Ό μ¬μ©νλ©΄ λͺ¨λ νμ μ»΄ν¬λνΈμμ Redux μ€ν μ΄μ μ κ·Όν μ μμ΅λ€. Providerλ React Redux λΌμ΄λΈλ¬λ¦¬μμ μ 곡νλ€.
β Provider μμ μ½λ
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './store';
import App from './App';
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
- useSelector
Redux μ€ν μ΄μμ μνλ₯Ό μ ννλ λ° μ¬μ©λλ ν
μ΄λ©° useSelector ν¨μλ μ
λ ν°(selector) ν¨μλ₯Ό μ λ¬λ°μ μ€ν μ΄μμ νμν μνλ₯Ό μ ννλ€. μ΄ ν¨μλ μνλ₯Ό λ°ννλ€.
β useSelector μμ μ½λ
import { useSelector } from 'react-redux';
function MyComponent() {
const count = useSelector(state => state.count);
return <div>{count}</div>;
}
- useDispatch
Redux μ‘μ
μ λ°μμν€λ λ° μ¬μ©λλ ν
μ΄λ©°useDispatch ν¨μλ dispatch ν¨μλ₯Ό λ°ννλ€. μ΄ ν¨μλ₯Ό μ¬μ©νλ©΄ μ‘μ
κ°μ²΄λ₯Ό μμ±νκ³ dispatch ν¨μλ₯Ό νΈμΆνμ¬ μ‘μ
μ λ°μμν¬ μ μλ€.
β useDispatch μμ μ½λ
import { useDispatch } from 'react-redux';
import { increment } from './actions';
function MyComponent() {
const dispatch = useDispatch();
const handleClick = () => {
dispatch(increment());
};
return <button onClick={handleClick}>Increment</button>;
}