useReducer
: ์ํ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ Hook
useState์ ๋น์ทํ ๊ฐ๋
์ด๋, useState๋ฅผ ํตํ ์ํ๊ด๋ฆฌ ๋ฐ ๋ฐ์ดํฐ ์ถ๊ฐ/์ ๊ฑฐ/์์ ๋ฑ์ ๊ฐ์ข
Handler๋ฅผ ์ผ์ผํ ์ธ ํ์์์ด ํ๋์ ํจ์๋ก ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
useReducer์ ์ค์ํ 3๊ฐ์ง ๊ฐ๋
์ dispatch, action, Reducer.
const [state,dispatch] = useReducer(๋ฆฌ๋์ ์ด๋ฆ, ์ด๊ธฐ ๋ฐ์ดํฐ)
state: ๋ง๊ทธ๋๋ก ์ํ ๊ทธ์์ฒด๋ก, ๊ฐ์ข
๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
dispatch: ํด๋น state์ ๋ํด์ ์
๋ฐ์ดํธํ๊ธฐ ์ํ ์๊ตฌ dispatch(์งํํ๊ณ ์ ํ๋ ์์
์ด๋ฆ)
์ผ๋ก ์์ฑํ๋ฉด ์์
์ด ์งํ๋จ.
action: ์ด๋ค ์
๋ฐ์ดํธํ ์ง ์๊ตฌํ๋ ๋ด์ฉ
reducer: state๋ฅผ ์
๋ฐ์ดํธํ๋ ์ญํ . state๋ฅผ ์
๋ฐ์ดํธํ๊ณ ์ถ์ ๋๋ง๋ค reducer๋ฅผ ํตํด dispatchํจ์๋ฅผ ๋ถ๋ฌ์ค๋ค.
์ํ(Reducer)์ ๊ฑฐ๋๋ด์ญ์ด(State)๋ฅผ ๋ณ๊ฒฝํด๋ฌ๋ผ๊ณ ์๊ตฌ(Dispatch).
์ด๋ค ๋ณ๊ฒฝ์ ์ํ๋๋ฐ?(action) : ์ก๊ธ
const reducer = (state, action) => {
// reducer๊ฐ returnํ๋ ๊ฐ์ด ์๋ก ์
๋ฐ์ดํธ๋ State
// useState์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ปดํฌ๋ํธ๊ฐ ๋ฐ๋๋๋ง๋ค ์ฌ๋ ๋๋งํด์ค๋ค
switch (action.type) {
case 'deposit':
return state + action.payload
case 'withdraw':
return state - action.payload
default:
return state
}
}
์ค๋ ์๋กญ๊ฒ ์๊ฒ ๋ ์ :
state ๋ก์ง์ด ํ ์ปดํฌ๋ํธ์ ๋๋ฌด ๋ง์ด์๊ฑฐ๋ ๋๋ฌด ํฉ์ด์ ธ ์์ ๋ ์ค๋ ๋ถํธํจ์ useReducer์ ํตํด ์ ๋ํ ์ ์๊ฒ ๋จ์ ๋ฐฐ์ ๋ค.
์ค๋ ๋ฐฐ์ด ๋ด์ฉ ์ค ๋ ์๊ณ ์ถ๊ฑฐ๋ ๊ถ๊ธํ ์ :
์ค๋์ ์๊ฐ:
์ฒ์์ ๊ทธ๋ฅ useState๋ง ์ฐ์ง, ์ ์ด๋ ๊ฒ๊น์ง ํด์ผ ํ๋..ํ๋๋ฐ useReducer์ ์ฌ์ฉํจ์ผ๋ก์จ ํจ์์ ์ฌ์ฌ์ฉ, ์ฝ๋์ ๊ฐ๊ฒฐ์ฑ ๋ฑ์ ์๊ฐํด๋ณด๋ ์ข์ ๊ฐ๋
์ด๋ผ๊ณ ์๊ฐ์ด ๋ค์๋ค......