์ฌ์ฉ์ ๋ฆฌ์คํธ ๊ธฐ๋ฅ์์์ ์ฃผ์ ์ํ ์
๋ฐ์ดํธ ๋ก์ง์ App ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ด๋ฃจ์ด์ง๋๋ก ๋ง๋ค์๊ณ , ์ํ๋ฅผ ์
๋ฐ์ดํธ ํ ๋์๋ useState๋ฅผ ์ฌ์ฉํด์ ์๋ก์ด์ํ๋ฅผ ์ค์ ํ๋ค.
์ํ๋ฅผ ๊ด๋ฆฌํ๊ฒ๋ ๋ useState๋ฅผ ์ฌ์ฉํ๋๊ฒ ๋ง๊ณ ๋ useReducer๊ฐ ์๋ค.
์ด Hook ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ์ ์ํ ์
๋ฐ์ดํธ ๋ก์ง์ ์ปดํฌ๋ํธ์์ ๋ถ๋ฆฌ์ํฌ์ ์์ด์
1)์ํ ์
๋ฐ์ดํธ ๋ก์ง์ ์ปดํฌ๋ํธ ๋ฐ๊นฅ์ ์์ฑ ํ ์๋ ์๊ณ ,
2)์ฌ์ง์ด ๋ค๋ฅธ ํ์ผ์ ์์ฑ ํ ๋ถ๋ฌ์์ ์ฌ์ฉ ํ ์๋ ์๋ค๊ณ ํ๋ค.
<useState>
useState๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์งฐ์๊ฒฝ์ฐ
<useReducer>
useReducer๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์งฐ์ ๊ฒฝ์ฐ
์ผ์ชฝ์ ๋ณด์ด๋ reducer(์ํ๋ณํํจ์)๋ฅผ ์ปดํฌ๋ํธ ๋ฐ๊นฅ์ผ๋ก ๋ถ๋ฆฌ๋ฅผํด์ ๋ค์ํ ์ํ๋ณํ๋ก์ง์ ์ปดํฌ๋ํธ ์ธ๋ถ๋ก ๋ถ๋ฆฌํด์ ์ค์์น์ผ์ด์ค๋ฌธ๋ฒ์ฒ๋ผ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋ฐ๊ฟ์์๋ค.
์ค๋ฅธ์ชฝ์ ์๋ ์ฝ๋๋ฅผ๋ณด๋ฉด
const Counter = () => {
๋น๊ตฌ์กฐํํ ๋น์ ํตํด์ ์ฌ์ฉ์ํ๊ณ ,
const [count, dispatch]
useState๋ฅผ ์ฌ์ฉํ๋ฏ์ด ๋ฐฐ์ด[]์ ๋ฐํํ์ฌ
์ฒซ๋ฒ์งธ๋ก ๋ฐํ๋ฐ๊ฒ๋๋ 0๋ฒ์งธ์ธ๋ฑ์ค๋ก๋ ํ์ฌ์ํ(state),
๋๋ฒ์งธ๋ก ๋ฐํ๋ฐ๊ฒ๋๋ 1๋ฒ์งธ์ธ๋ฑ์ค๋ก๋ ์ํ๋ฅผ ๋ณํ์ํค๋ํจ์๋ฅผ ๋ฃ๋๋ค.
useReducer(reducer, 1);
๊ทธ๋ฆฌ๊ณ useReducer๋ฅผ ์ฌ์ฉํ ๋
์ฒซ๋ฒ์งธ ์ธ์๋ก ๊ผญ reducer๋ผ๋ ํจ์๋ฅผ ์ ๋ฌํด์ผํ๋ค.
์์ ์ฒซ๋ฒ์งธ์ธ๋ฑ์ค์ธ dispatch๊ฐ ์ํ๋ณํ๋ฅผ ์ผ์ผํค๋๋ฐ(=raise) ์ผ์ด๋ ์ํ๋ณํ๋ฅผ reducer๊ฐ ์ฒ๋ฆฌํด์ฃผ๋ ์ญํ ์ ํ๋ค
๋๋ฒ์งธ ์ธ์๋ count state์ ์ด๊ธฐ๊ฐ์ด ๋๋ค
๐ฏ์ค๊ฐ ์ ๋ฆฌ
useReducer๋ฅผ ์ฌ์ฉํ์ฌ count๋ผ๋ state๋ฅผ ๋ง๋ค๊ฒ๋๋ฉด ์ด๊ธฐ๊ฐ์ด 1๋ก ํ ๋น์ด๋๊ณ , count state๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ผ๋ฉด ์ํ๋ณํํจ์์ธ dispatch๋ฅผ ํธ์ถํ์ฌ ์ํ๋ณํ๋ฅผ ์ผ์ผํค๋ฉด ์ํ๋ณํ ์ฒ๋ฆฌํจ์์ธ reducer๊ฐ ์ฒ๋ฆฌํ๊ฒ๋๋ค
dispatch({ type: 1 })
return์ ๋ณด๋ฉด dispatch๊ฐ ๊ฐ๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ค(๊ฐ์ฒด ์์๋ type์ด๋ผ๋ ํ๋กํผํฐ)์ ์ ๋ฌํ๋๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ฅผ Action๊ฐ์ฒด ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
(์ํ๋ณํ๋ฅผ ์ค๋ช
ํ ๊ฐ์ฒด, Action์ ์ํ๋ณํ๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค)
dispatch(์ํ๋ณํํจ์)๋ฅผ ํตํ์ฌ ์ ๋ฌ๋ action๊ฐ์ฒด๋ ์ค๋ฅธ์ชฝ ๋ถ๋ฆฌ๋ reducer๋ก ์ ๋ฌ๋์ด ์ํ๋ณํ์ ๋ํ ์ฒ๋ฆฌ๋ reducer๊ฐ ์ฒ๋ฆฌํ๊ฒ๋๋ค.
const reducer = [state, action] => {}
ํธ์ถ๋ reducerํจ์๋
์ฒซ๋ฒ์งธ์ธ์๋ก๋ ํ์ฌ์ํ์ธ state๋ฅผ ๋ฐ๊ณ ,
๋๋ฒ์งธ์ธ์๋ก๋ dispatch๋ฅผ ํธ์ถํ ๋ ์ ๋ฌํด์ฃผ์๋ Action๊ฐ์ฒด๋ฅผ ๋ฐ๋๋ค.
const [state, dispatch] = useReducer(reducer, initialArg, init);
์ฃผ์
React๋ dispatch ํจ์์ ๋์ผ์ฑ์ด ์์ ์ ์ด๊ณ ๋ฆฌ๋ ๋๋ง ์์๋ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฆฌ๋ผ๋ ๊ฒ์ ๋ณด์ฅํฉ๋๋ค. ์ด๊ฒ์ด useEffect๋ useCallback ์์กด์ฑ ๋ชฉ๋ก์ ์ด ํจ์๋ฅผ ํฌํจํ์ง ์์๋ ๊ด์ฐฎ์ ์ด์ ์
๋๋ค.
useReducer()
React๊ณต์๋ฌธ์-useReducer()
React๊ฐ์-์ด์ ํ๊ฐ์ฌ