๐Reducer
๐ก๊ฐ๋
 ๋ฐ ์ฌ์ฉ์ด์ 
- ์ปดํฌ๋ํธ ์ธ๋ถ์ ์ํ ์
๋ฐ์ดํธ ๋ก์ง์ ๋ชจ์๋์ ๋จ์ผ ํจ์
- ์ปดํฌ๋ํธ ์ธ๋ถ์ Reducer ํจ์ ์์ฑํด state ๋ณ๊ฒฝํ๋ ๋ก์ง ์ด๋
- state๋ฅผ ์
๋ฐ์ดํธ ํ  ๋ useState๋ฅผ ์ฌ์ฉํ ๋ณ๊ฒฝํจ์(setState)๋ก ํด์ฃผ๋ฉด,
 ์ปดํฌ๋ํธ๊ฐ ์ปค์ง์๋ก ๋ก์ง์ด ์ ์  ๋ง์์ ธ์ ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง
- ์ปดํฌ๋ํธ์์ ๋ก์ง์ ๋ถ๋ฆฌํด ์ฝ๋์ ๋ณต์ก์ฑ์ ์ค์ด๊ณ  ๋ชจ๋  ๋ก์ง์ ์ฝ๊ฒ ์ ๊ทผ
๐ก์ฌ์ฉํ๊ธฐ
useReducer
- ์ปดํฌ๋ํธ์ Reducer๋ฅผ ์ถ๊ฐํ  ์ ์๊ฒ ํด์ฃผ๋ React Hook
1. useState ๋์ ํด์ useReducer ์ ์ธํ๊ธฐ
const [state, setstate] = useState(initialArg);
const [state, dispatch] = useReducer(reducer, initialArg)
const initialArg = { age: 42 }
2. dispatch ํตํด ์ํ ์ ๋ฌํ๊ธฐ
- dispatch({์ ๋ฌํ ๊ฐ์ฒด})ํํ๋ฅผ ํตํด ์ ๋ฌ๋๋ ๊ฐ์ฒด๋ฅผ- action์ด๋ผ๊ณ  ๋ถ๋ฆ
- action๊ฐ์ฒด๋ ์ด๋ค ํํ๊ฐ ๋๋  ์๊ด์์ง๋ง,
 ์ผ๋ฐ์ ์ผ๋ก ์ด๋ค ์กฐ๊ฑด์ผ๋ ์คํํ  ์ง ์ค๋ช
ํ๋ ๋ฌธ์์ด์- type์ผ๋ก ์ง์ ,
 ๋ค๋ฅธ ํ๋กํผํฐ์๋ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๋ฌ
dispatch({ type: 'added', ex:'ex1', num: 123 })
dispatch({ type: 'deleted', ex:'ex2' })
3. Reducer ํจ์ ์์ฑ
- Reducer ํจ์
 - ์ํ ๋ณ๊ฒฝ ๋ก์ง ๋ค์ด๊ฐ
 - 2๊ฐ์ ์ธ์ : ํ์ฌ์ํ(state), ์ก์
 ๊ฐ์ฒด(action)
 - ๋ฆฌํด๊ฐ : ๋ณ๊ฒฝ๋ state
- ์ก์
 ๊ฐ์ฒด ์์ type์ ๋ฐ๋ผ์ ๋ฆฌํดํด์ฃผ๋ ๊ฐ์ ๊ฒฐ์  - ์ผ๋ฐ์ ์ผ๋ก switch๋ฌธ ์ฌ์ฉ
- ํ์ฌ์ํ state๋ฅผ ์ธ์๋ก ๋ฐ์์ค๊ธฐ ๋๋ฌธ์ ์ปดํฌ๋ํธ ์ธ๋ถ์์๋ Reducer ์ฌ์ฉํ  ์ ์์
function exReducer(state, action) {
  switch (action.type) {
    case 'added': {
      
      
      const { ex, num } = action;
      return {
        
        
        
      };
    }
    case 'deleted': {
      
      return {
        
        
        
      };
    }
    default: {
      throw Error(`์์์๋ ์ก์
 ํ์
: ${action.type}`);
    }
  }
}
๐กuseState vs useReducer
- useState๊ฐ Reducer ํจ์ , dispatch,action์ ์์ฑํ์ง ์์๋ ๋ผ์ ์ฒ์์๋ ์ฝ๋์์ด ์ ์ ์ ์์ง๋ง, ๋ง์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์๊ธฐ๊ณ  ์ํ๋ฅผ ๋น์ทํ ๋ฐฉ์์ผ๋ก ์์ ํ๋ ๊ฒฝ์ฐ, useReducer์ ์ฝ๋์์ด ๋ ์ ์ด์ง
- ๊ฐ๋
์ฑ ์ญ์ ์ฝ๋์์ด ๋์ด๋  ์๋ก useReducer์ ์ฌ์ฉํ ๊ฒฝ์ฐ๊ฐ ์ข์
 =>์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋์ด๋ค ๋ก์ง์ ์ํํ๋ผํ๋์ ํ์
 ๊ฐ๋ฅ