๐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์ ์ฌ์ฉํ ๊ฒฝ์ฐ๊ฐ ์ข์
=> ์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋
์ด๋ค ๋ก์ง์ ์ํํ๋ผ
ํ๋์ ํ์
๊ฐ๋ฅ