[React-Hooks] - useReducer

yiwoojungยท2022๋…„ 7์›” 19์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
7/9
post-thumbnail
post-custom-banner

React Hooks์— ์ทจํ•œ๋‹ค - useReducer ํ™•์‹คํžˆ ์ •๋ฆฌํ•ด๋“œ๋ ค์š” | ๋ฆฌ์•กํŠธ ํ›…์Šค ์‹œ๋ฆฌ์ฆˆ ๋ฅผ ๋ณด๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.


์ปดํฌ๋„ŒํŠธ์˜ state๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ useState๋ฅผ ์‚ฌ์šฉํ•ด์™”๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฌ์•กํŠธ์—์„œ state ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ํ›…์ด ์žˆ๋‹ค. ๋ฐ”๋กœ useReducer ๋ผ๋Š” ํ›…์ด๋‹ค.

1. 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์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด์ž.

2. 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์•ˆ์— ๋“ค์–ด๊ฐ€์žˆ๋Š” ๋‚ด์šฉ๋Œ€๋กœ ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์ค€๋‹ค.



3. useReducer ์‚ฌ์šฉํ•˜๊ธฐ


๊ฐ„๋‹จํ•œ ์˜ˆ๊ธˆ ์ถœ๊ธˆ ์˜ˆ์ œ

useReducer์˜ reducer๋Š” ์ „๋‹ฌ ๋ฐ›์€ action ๋Œ€๋กœ๋งŒ state๋ฅผ ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์ค€๋‹ค๋Š” ํฐ ์žฅ์ ์ด ์žˆ๋‹ค. ๋งŒ์•ฝ์— ์šฐ๋ฆฌ๊ฐ€ ์•Œ ์ˆ˜ ์—†๋Š” ํƒ€์ž…์˜ action์„ ๋ณด๋‚ธ๋‹ค๋ฉด ์ด reducer๋Š” ์•„๋ฌด์ผ๋„ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋„ ์šฐ๋ฆฌ๊ฐ€ ์˜ˆ์ƒํ•œ๋Œ€๋กœ๋งŒ state๊ฐ€ ์—…๋ฐ์ดํŠธ ๋  ๊ฒƒ์ด๋‹ค.




์ถœ์„๋ถ€ ์˜ˆ์ œ

switch ๋ฌธ์„ ์ด์šฉํ•ด์„œ ์ผ€์ด์Šค๋ณ„๋กœ ๋‹ค๋ฅธ ์—ญํ• ์„ ํ•˜๋Š” reducer ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋‹ค.
ํ•™์ƒ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์€ ์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด์ „์˜ ํ•™์ƒ๋“ค๊ณผ ์ถ”๊ฐ€ํ•œ ํ•™์ƒ๋“ค์„ ๊ฐ™์ด ๋ณด์—ฌ์ฃผ๋„๋ก ํ•˜์˜€๋‹ค.
์‚ญ์ œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•™์ƒ ๊ฐ๊ฐ์˜ id๊ฐ€ ํ•„์š”ํ•ด์„œ Date.now()๋ผ๋Š” ๋‚ด์žฅ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ณ  filter ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‚ญ์ œํ•˜๊ณ  ๋‚จ์€ ํ•™์ƒ๋“ค์„ ๋ณด์—ฌ์ฃผ๋„๋ก ํ•˜์˜€๋‹ค.
์ถœ์„ ์—ฌ๋ถ€๋Š” isHere ๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ true ๋‚˜ false์˜ Boolean ๊ฐ’์„ ์คฌ๋‹ค. isHere์˜ ๊ฐ’์€ ๋ˆ„๋ฅผ๋•Œ๋งˆ๋‹ค ์ด์ „ ๊ฐ’์˜ ๋ฐ˜๋Œ€๊ฐ€ ๋œ๋‹ค.


์—ฌ๊ธฐ์„œ ACTION์˜ ํƒ€์ž…(add, delete, mark)๋“ค์„ ํ•œ๋ฐ ๋ชจ์•„์„œ ๋ณ€์ˆ˜๋กœ ๋‹ด์•„๋‘๋ฉด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์— ์ข‹๋‹ค.


ํ•™์ƒ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

ํ•™์ƒ ์ด๋ฆ„์„ ์ง€์šฐ๊ณ  ์ถœ์„์ฒดํฌ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

profile
์˜๊ฒฌ์ด ์žˆ์œผ์‹œ๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋‚ด์šฉ์„ ๋ฐœ๊ฒฌํ•˜์…จ๋‹ค๋ฉด ์žฌ๋นจ๋ฆฌ ๋Œ“๊ธ€ ์ฃผ์„ธ์š” ๏ฝกโ€ขโ—กโ€ข๏ฝก
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€