useReducer
๋จ์ํ state ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ,
state๋ฅผ ๋ฐ๊พธ๊ธฐ ์ํ ๋ก์ง, ํจ์ ๋ฑ์ ๊ด๋ฆฌํ ์ ์๋๋ฐ, ์ด๋ด ๋ useReducer๋ฅผ ์ฌ์ฉํ๋ฉด ๊ด๋ฆฌ์ ์ฉ์ดํฉ๋๋ค.
๊ฐ๋จํ ๋งํด state๋ฅผ ๋ฐ๊พธ๊ธฐ ์ํ ์ฌ๋ฌ ํจ์๋ค์ ํ๋๋ก ๋ฌถ์ด์ ๊ด๋ฆฌํ ์ ์๋ค๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค.
const [state, dispatch] = useReducer(reducer, initialState);
ํ๋์ state์ dispatch๋ฅผ ํตํด ๊ฐ์ ๋ณํํด ์ค๋๋ค.
(dispatch๊ฐ setState์ญํ ์ ํ๋ค๊ณ ๋ณด๋ฉด ๋ ๋ฏ์ถ์ต๋๋ค.)
- state : ์ปดํฌ๋ํธ์์์ state
- dispatch: action์ ๋ฐ์ํ๋ ํจ์ (setState์ ๋น์ท)
- reducer : reducer ์ ์
- initialState : ์ด๊ธฐ๊ฐ
reducer
function reducer(state, action) {
switch (action.type) {
case 'INCREMENT':
return state + 1;
case 'DECREMENT':
return state - 1;
default:
return state;
}
}
// state = state + 1; ๋์
๊ธ์ง
๋ฐ๋์ switch๋ก ์ฌ์ฉํด์ผ ๋๋ ๊ฒ์ ์๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ถ๋ถ์ ๋๋ค.
case๋ณ action์ ์ ์ํด์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
state๋ ์ฝ๊ธฐ ์ ์ฉ์์ผ๋ก ๊ฐ์ ๋ก ๊ฐ์ ๋ฃ์ด์ฃผ๋ ํ์๋ ํ๋ฉด ์ ๋๋ค.
dispatch
const onIncrease = () => {
dispatch({ type: 'INCREMENT' });
};
type๊ท์น์ ๋ฐ๋ผ ์งํ๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
switch์ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ๋ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
์
+1 ๋๋ -1 ๋ฒํผ์ ๋๋ฅด๊ฒ ๋๋ฉด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ฒ ๋๊ณ ,
๋ฐ์ํ ์ด๋ฒคํธ์ ๋ฐ๋ผ dispatch๋ฅผ ํตํด reducer์ ์ ์๋ action์ด ์คํ๋๊ฒ ๋๋ค,
useState์ useReducer ๋น๊ต
useState
useReducer
์์์ ์๋ก ๋ค์๋ ์์ค๋ฅผ useState๋ก ๋ฐ๊ฟ์ ๋น๊ตํด ๋ดค์ต๋๋ค.
useReducer๋ก ํ ์ ์๋ ๊ฑด useState๋ก๋ ํ ์ ์๊ณ , ๊ทธ ๋ฐ๋๋ ๊ฐ๋ฅํฉ๋๋ค.
๊ฐ๋ฐ์ ํ๋จํ์ ์ด๋ค state์ ์ด๋ค hook์ ์ฌ์ฉํ ์ง ์ ํด์ ๊ฐ๋ฐํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋๊ทธ๋ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์...
๋ ๋ค ์ฌ์ฉํด ๋ณด๊ณ , ๋ณธ์ธ์๊ฒ ๋ง๊ฑฐ๋ ์ฝ๋ ๊ด๋ฆฌ ์ฐจ์, ๊ฐ๋ ์ฑ์ ๋ณด๋ฉด์ ์ ํ๋ฉด ๋ ๋ฏ์ถ์ต๋๋ค.
2023.06.06 - [Front-End/React] - Hook) useState
'Front-End > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React] Hook : useContext (0) | 2023.06.23 |
---|---|
React] Hook : useState ๋น๋๊ธฐ โ ๋๊ธฐ ํ๋ ๋ฒ (0) | 2023.06.22 |
React] Hook : useCallback (0) | 2023.06.22 |
React] Hook : useMemo (0) | 2023.06.20 |
React] Hook : useRef (0) | 2023.06.20 |