React Hooks์ ์ทจํ๋ค - useReducer ํ์คํ ์ ๋ฆฌํด๋๋ ค์ | ๋ฆฌ์กํธ ํ ์ค ์๋ฆฌ์ฆ ๋ฅผ ๋ณด๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
์ปดํฌ๋ํธ์ state๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด์ useState๋ฅผ ์ฌ์ฉํด์๋ค. ํ์ง๋ง ๋ฆฌ์กํธ์์ state ๊ด๋ฆฌ๋ฅผ ์ํ ๋ ๋ค๋ฅธ ํ
์ด ์๋ค. ๋ฐ๋ก useReducer
๋ผ๋ ํ
์ด๋ค.
useReducer๋ useState ์ฒ๋ผ state๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด useReducer๋ ์ธ์ ์ฌ์ฉํ๋ ๊ฒ์ผ๊น?
{
teacher: 'James',
student: ['Kim','Amy','John'],
count : 3,
locations: [
{country: 'Korea', name: 'A'},
{country: 'Australia', name: 'B'}
]
}
์์ฒ๋ผ ์ฌ๋ฌ๊ฐ์ ํ์ ๊ฐ์ ํฌํจํ๋ ๋ณต์กํ state๋ฅผ ๋ค๋ค์ผํ ๋ useState ๋์ useReducer๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ๋ ๊น๋ํ๊ฒ ์์ฑํ ์ ์๋ค. ๋ฌผ๋ก ์ ์ง๋ณด์๋ ํ๊ฒฐ ํธํด์ง๋ค. ์ด๋ ๊ฒ ํธ๋ฆฌํ ํ ์ธ useReducer์ ๋ํด ๋ ์์๋ณด์.
useReducer๋Reducer
, Dispatch
๊ทธ๋ฆฌ๊ณ Action
์ด๋ ๊ฒ 3๊ฐ์ง๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
๋ง์ฝ ์ฒ ์์ ์ํ ๊ทธ๋ฆฌ๊ณ ๊ฑฐ๋๋ด์ญ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์ฒ ์์ ๊ฑฐ๋๋ด์ญ์ ์ฒ ์๊ฐ ์ง์ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ํ์ด ์ฒ ์์ ์๊ตฌ๋๋ก ๋์ ์
๋ฐ์ดํธ ํด์ค๋ค.
์ฌ๊ธฐ์ ์ด ๊ฑฐ๋๋ด์ญ์ state
๋ผ๊ณ ํ๋ค๋ฉด ์ํ์ Reducer
๋ผ๊ณ ํ ์ ์๋ค. Reducer
๋ state
๋ฅผ ์
๋ฐ์ดํธ ํด์ฃผ๋ ์ญํ ์ ํ๋ค. ์ปดํฌ๋ํธ์ state
๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด ๊ผญ ์ด Reducer
๋ฅผ ํตํด์ ํด์ผ๋๋ ๊ฒ์ด๋ค. ๋ง์น ์ฒ ์๊ฐ ๊ฑฐ๋๋ด์ญ์ ์
๋ฐ์ดํธํ๊ธฐ ์ํด์ ์ํ์ด ๋์ ํด์ค์ผ ํ๋ ๊ฒ์ฒ๋ผ ๋ง์ด๋ค.
์ฒ ์๋ ๊ฑฐ๋๋ด์ญ์ด๋ผ๋ state
๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด ์ํ์๊ฒ ์๊ตฌ
๋ผ๋ ๊ฒ์ ํ๋ค. ์ด ์๊ตฌ
๋ผ๋ ํ์๋ฅผ Dispatch
๋ผ๊ณ ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ '๋ง์์ ์ถ๊ธํด์ฃผ์ธ์'๋ผ๋ ์๊ตฌ(Dispatch)
์ ๋ด์ฉ์ Action
์ด๋ผ๊ณ ํ๋ค.
์ฒ ์๋ ์๊ตฌ๋ผ๋ Dispatch
์์ ๋ด์ฉ์ด๋ผ๋ Action
์ ๋ด์์ ์ํ์ด๋ผ๋ Reducer
์ ๋ณด๋์ผ๋ก์จ state๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด Reducer(์ํ)
๋ Action(์๊ตฌ์ฌํญ)
์ ๋ด์ฉ๋๋ก state(๊ฑฐ๋๋ด์ญ)
๋ฅผ ๋ณ๊ฒฝํด์ค๋ค.
์ฒ ์๋ ์ํ์๊ฒ ์ฌ๋ฌ๊ฐ์ง ๋ค๋ฅธ ์ก์
๋ค์ ๋ณด๋์ผ๋ก์จ ๋ณต์กํ ์ผ์ ํ ์ ์๋ค. ์ฒ ์์ ์ก์
์ ์์์ ์ฒ๋ฆฌํด์ฃผ๋ Reducer
๋ ๋ณต์กํ ์ผ์ ํ๋๋ฐ ์์ด์ ์์ฃผ ์ต๊ณ ๋ผ๊ณ ํ ์ ์๋ค.
์ด์ ์ด๊ฒ์ ์ปดํฌ๋ํธ์ ๊ด์ ์์ ๋ณด์.
์ฐ๋ฆฌ์ state
๋ฅผ ์
๋ฐ์ดํธ ์์ผ์ฃผ๊ธฐ ์ํด์๋ Dispatch
๋ผ๋ ํจ์์ ์ธ์๋ก Action
์ ๋ฃ์ด์ Reducer
์๊ฒ ์ ๋ฌํด์ฃผ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด Reducer
๊ฐ ์ปดํฌ๋ํธ์ state
๋ฅผ ์ฐ๋ฆฌ์ Action
์์ ๋ค์ด๊ฐ์๋ ๋ด์ฉ๋๋ก ์
๋ฐ์ดํธ ์์ผ์ค๋ค.
useReducer์ reducer๋ ์ ๋ฌ ๋ฐ์ action ๋๋ก๋ง state๋ฅผ ์ ๋ฐ์ดํธ ์์ผ์ค๋ค๋ ํฐ ์ฅ์ ์ด ์๋ค. ๋ง์ฝ์ ์ฐ๋ฆฌ๊ฐ ์ ์ ์๋ ํ์ ์ action์ ๋ณด๋ธ๋ค๋ฉด ์ด reducer๋ ์๋ฌด์ผ๋ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ค ์ํฉ์์๋ ์ฐ๋ฆฌ๊ฐ ์์ํ๋๋ก๋ง state๊ฐ ์ ๋ฐ์ดํธ ๋ ๊ฒ์ด๋ค.
switch ๋ฌธ์ ์ด์ฉํด์ ์ผ์ด์ค๋ณ๋ก ๋ค๋ฅธ ์ญํ ์ ํ๋ reducer ํจ์๋ฅผ ๋ง๋ค์ด ์ฃผ์๋ค.
ํ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์คํ๋ ๋ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ์ด์ ์ ํ์๋ค๊ณผ ์ถ๊ฐํ ํ์๋ค์ ๊ฐ์ด ๋ณด์ฌ์ฃผ๋๋ก ํ์๋ค.
์ญ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์๋ ํ์ ๊ฐ๊ฐ์ id๊ฐ ํ์ํด์ Date.now()
๋ผ๋ ๋ด์ฅ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์๊ณ filter
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ญ์ ํ๊ณ ๋จ์ ํ์๋ค์ ๋ณด์ฌ์ฃผ๋๋ก ํ์๋ค.
์ถ์ ์ฌ๋ถ๋ isHere
๋ผ๋ ๋ณ์๋ฅผ ํ๋ ๋ง๋ค์ด์ true ๋ false์ Boolean
๊ฐ์ ์คฌ๋ค. isHere์ ๊ฐ์ ๋๋ฅผ๋๋ง๋ค ์ด์ ๊ฐ์ ๋ฐ๋๊ฐ ๋๋ค.
์ฌ๊ธฐ์ ACTION์ ํ์
(add, delete, mark)๋ค์ ํ๋ฐ ๋ชจ์์ ๋ณ์๋ก ๋ด์๋๋ฉด ์ฝ๋ ๊ฐ๋
์ฑ์ ์ข๋ค.
ํ์ ์ด๋ฆ์ ์ถ๊ฐํ๋ ๋ถ๋ถ์ด๋ค.
ํ์ ์ด๋ฆ์ ์ง์ฐ๊ณ ์ถ์์ฒดํฌ ํ๋ ๋ถ๋ถ์ด๋ค.