μ»΄ν¬λνΈμμ μνλ³ν λ‘μ§μ λΆλ¦¬
νμμ± β
useState
λ₯Ό μ΄μ©νλ©΄ μμ μ²λΌ μν λ³ν ν¨μλ₯Ό κ°κ°Counter
μ»΄ν¬λνΈ μμ
μμ±μ ν΄μΌ νμ΅λλ€.- μ΄μ κ°μ κ²½μ° μ»΄ν¬λνΈμ μ½λκ° κΈΈμ΄μ§κ³ λ³΅μ‘ ν μ λ°μ μμ΅λλ€.
useReducer μ μ¬μ©νλ©΄ β
- μΌμͺ½μ 보μ΄λ
reducer
λΌλ μν λ³ν ν¨μλ₯Ό μ»΄ν¬λνΈ λ°μΌλ‘ λΆλ¦¬λ₯Ό νμ¬ λ€μν μνλ³ν λ‘μ§μ μ»΄ν¬λνΈ μΈλΆλ‘ λΆλ¦¬λ₯Ό ν΄μ μ½κ² μ²λ¦¬ ν μ μκ² λ°κΏ μ μμ΅λλ€. useReducer
λuseState
λ₯Ό λ체 ν μ μλ κΈ°λ₯ μ λλ€.
β λμ - 1
const Counter = () => {
const [count, dispatch] = useReducer(reducer, 1);
//const [ state, μνλ₯Ό λ³νμν€λ action μ λ°μ μν€λ ν¨μ ] = useReducer( reducer, state μ μ΄κΈ° κ° )
...
}
reducer
λdispatch
ν¨μκ° μν λ³νλ₯Ό μΌμΌν€λλ° μΌμ΄λ μν λ³νλ₯Ό μ²λ¦¬ν΄ μ£Όλ μν μ λλ€.
β λμ - 2
return {
<div>
{count}
<button onClick = {() => dispatch({ type : 1 })> add 1 </button>
dispatch
ν¨μλ₯Ό νΈμΆ νλ©΄μ({ type : 1 })>
κ°μ²΄λ₯Ό μ λ¬νκ² λ©λλ€.- κ°μ²΄μλ κΌ
type
μ΄λΌλ νλ‘νΌν°κ° λ€μ΄μλλ°, μ΄ λ dispatch μ ν¨κ» μ λ¬λλ κ°μ²΄λ₯Όaction
κ°μ²΄λΌκ³ λΆλ¦ λλ€. ( action = μν λ³ν ) - μ¦, μν λ³νλ₯Ό μ€λͺ ν κ°μ²΄
dispatch
κ° μ€νλλ©΄μ μ λ¬λaction
κ°μ²΄λreducer
λ‘ μ λ¬ λ©λλ€.
β λμ - 3
const reducer = (state, action) => {
// const reducer = ( μ€μ λ μ΄κΈ° κ°, dispatch λ₯Ό νΈμΆν λ μ λ¬ν΄μ€¬λ action κ°μ²΄λ₯Ό μ λ¬)
switch (action.type){
case 1:
return state + 1;
case 10:
return state + 1;
case 100:
return state + 1;
case 1000:
return state + 1;
case 10000:
return state + 1;
default:
return state;
}
};
- λ§μ½ μμ add 1 λ²νΌμ λλ₯΄λ©΄
reduce
ν¨μκ° μ€νμ΄ λκ³ ,reduce
ν¨μκ° λ°κ² λλ state λ 1μ΄ λκ³ , μ΄μ λconst [count, dispatch] = useReducer(reducer, 1);
action
κ°μ²΄λdispatch({ type : 1 })
μ΄λΌλ κ°μ²΄λ₯Ό λ°κ² λ©λλ€.switch - case
μ μ¬μ©νμ¬action.type
μ λ°λΌμ κ°κ° λ€λ₯Έ return μ νκ³ μμ΅λλ€.
( λ°ννλ return μ μλ‘μ΄ state κ° λ©λλ€. )- μ 리λ₯Ό νλ©΄ add 1 λ²νΌμ λλ¬
reducer
λ₯Ό μΌμΌν€κ² λλ©΄,action
μtype: 1
λ‘ μ λ¬νκ³ , 1μ case 1 μ΄κΈ° λλ¬Έμ 1 + 1 = 2 λ₯Ό 리ν΄νκ³ μ΄κ²μ΄ μλ‘μ΄ μνκ° λ©λλ€. κ·Έλ¦¬κ³ countμ state κ° μ λ°μ΄νΈ λκ³{count}
μ λ°μ λ©λλ€.
β μ°Έκ³
'π Front-End > React.js' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
React SPA & CSR (0) | 2022.10.24 |
---|---|
Context API (0) | 2022.10.24 |
μ΅μ ν - useCallback (0) | 2022.10.24 |
μ΅μ ν - React.memo (0) | 2022.10.24 |
μ΅μ ν - useMemo (0) | 2022.10.24 |