Redux ๊ฒ‰ํ•ฅ๊ธฐ๐Ÿ˜›

junameeยท2021๋…„ 9์›” 13์ผ
2

ํ”„๋ก ํŠธ์—”๋“œ

๋ชฉ๋ก ๋ณด๊ธฐ
7/17

- Redux ๊ตฌ์„ฑ์š”์†Œ

  • store : redux์˜ ์ƒํƒœ๊ฐ’์„ ๊ฐ–๋Š” ๊ฐ์ฒด (์ „์ฒด ์ƒํƒœ๊ฐ’์€ ์˜ค์ง ํ•˜๋‚˜, store ๊ฐ์ฒด 1๊ฐœ ๋ฟ์ด๋‹ค. readOnly)
  • action : state๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ฌ ํ–‰๋™ (trigger ์—ญํ• )
  • reducer : action์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ store์— ์ ‘๊ทผํ•ด ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ฌ ํ•จ์ˆ˜

(*์ˆœ์ˆ˜ํ•จ์ˆ˜: ๋™์ผํ•œ ์ธํ’‹=>๋™์ผํ•œ ์•„์›ƒํ’‹, ๋งค๋ฒˆ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ค๋Š” new Date(), fetch(), Math.Random()๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋Š” ๋ฆฌ๋“€์„œ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๊ณ , ๋ฆฌ๋“€์„œ ์™ธ๋ถ€์˜ ํ•œ ๋ณ€์ˆ˜์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. ์˜ค๋กœ์ง€ state์™€ action๋งŒ ๊ฐ€์ ธ์™€ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก~!
๋งŒ์•ฝ, ์œ„์™€ ๊ฐ™์€ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œํ˜ธ์ถœ์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์ด๋ผ๋ฉด ์ปดํฌ๋„ŒํŠธ ๋‹จ์—์„œ ์ ์šฉ์‹œํ‚ค๊ฑฐ๋‚˜ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.)

- ์œ ์šฉํ•œ hook

from 'redux'
createStore : ํ•˜๋‚˜์˜ store๋ฅผ ์ƒ์„ฑ, ๋ฆฌ๋“€์„œ๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค.
combineReducers : ์—ฌ๋Ÿฌ ์ƒํƒœ๋ฅผ ํ•˜๋‚˜์˜ store ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

from 'react-redux'
Provider: store๋ฅผ ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€์žฅ ์—”ํŠธ๋ฆฌํฌ์ธํŠธ๋ฅผ <Provider store={store}><App/></Provider>๊ณผ ๊ฐ™์ด ๊ฐ์‹ธ์ค€๋‹ค. prop์œผ๋กœ store๋ฅผ ๋‚ด๋ ค์ค€๋‹ค.
useSelector: store์˜ ์ƒํƒœ๊ฐ’์„ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
useDispatch : dispatch ํ•จ์ˆ˜๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. action์„ ์ธ์ž๋กœ ๋ฐ›๊ณ , action์ด ๋ฐœ์ƒํ•  ๋•Œ dispatch๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
shallowEqual : selectorํ•จ์ˆ˜๋ฅผ ์ตœ์ ํ™” ์‹œํ‚จ๋‹ค. useMemo์™€ ๋น„์Šทํ•˜๋‹ค. (prevState์™€ nextState๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜์ด๊ณ , ์ฐจ์ด๊ฐ€ ์ƒ๊ฒผ์„ ๊ฒฝ์šฐ์—๋งŒ ๋ Œ๋”๋ง์„ ํ—ˆ์šฉํ•œ๋‹ค.)

- Redux-DevTools-extension ๐Ÿงก๐Ÿ‘

:์ƒํƒœ๊ด€๋ฆฌ ๋ฐ ์˜ˆ์ธก์— ์œ ์šฉํ•˜๋‹ค.

- ํด๋”๊ตฌ์กฐ์— ๋Œ€ํ•ด

๋ฆฌ๋•์Šค๋ฅผ ํ•™์Šตํ•˜๋ฉฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์นด์šดํ„ฐ, ํˆฌ๋‘๋ฆฌ์ŠคํŠธ, ๋ชจ๋‹ฌ์„ ๊ตฌํ˜„ํ•ด๋ดค๋Š”๋ฐ,
๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ๋ทฐ์™€ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ๋ถ„๋ฆฌ์‹œํ‚ค๋ฉด์„œ, ์ƒํƒœ๊ด€๋ฆฌ์˜ ๊ตฌ์กฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  • ์•ก์…˜ํƒ€์ž…, ์•ก์…˜์ƒ์„ฑํ•จ์ˆ˜, ๋ฆฌ๋“€์„œ๋ฅผ ํ•œ ํŒŒ์ผ์— ๋ชฐ์•„์„œ ์ •์˜ํ•œ ๊ตฌ์กฐ (DucksํŒจํ„ด)
    : export ์•ก์…˜์ƒ์„ฑํ•จ์ˆ˜ , export default Function_Reducer
src
 โˆŸ components
	โˆŸ Modal.js  //view์— ํ•ด๋‹นํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ๋ชจ์Œ
 โˆŸ container
	โˆŸ ModalContainer.js 
	//selector, dispatch๋ฅผ ์ƒ์„ฑํ•ด ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์—ญํ• 
 โˆŸ modules
	โˆŸ modal.js //action, reducer๋ฅผ ์ €์žฅํ•œ ๊ณณ
 โˆŸ app
  • ์•ก์…˜(ํƒ€์ž…/ํ•จ์ˆ˜) / ๋ฆฌ๋“€์„œ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ •์˜ํ•œ ๊ตฌ์กฐ
src
 โˆŸ components
 	โˆŸ Modal.js 
   //view์— ํ•ด๋‹นํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ 
 โˆŸ store
 	โˆŸ actions 
    		โˆŸ modals.js      //action ์ƒ์„ฑ์ž ํ•จ์ˆ˜
                โˆŸ modalsTypes.js //action type ์ •์˜
	โˆŸ reducers
    		โˆŸ modals.js  //reducer์ €์žฅ
โˆŸ app

component์—์„œ ์‚ฌ์šฉํ•  dispatchํ•จ์ˆ˜ ๋ฐ ํ•„์š”ํ•œ ์ƒํƒœ๋ฅผ selector๋กœ ์ง์ ‘ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์ฒซ๋ฒˆ์งธ ํด๋” ๊ตฌ์กฐ์—์„œ ์ฒ˜๋Ÿผ container๋ฅผ ๋‘๊ณ  ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— prop์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•  ๋“ฏํ•˜๋‹ค.

์•„์ง ๋ฆฌ๋•์Šค๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์ž…์žฅ์—์„œ๋Š” ํ•œ ํŒŒ์ผ์— ๋ชจ๋“  ์ƒํƒœ์™€ ๊ด€๋ จ ํ•จ์ˆ˜๋ฅผ ๋ชจ์•„๋†“์€ ํŒจํ„ด์ด ๋” ๋ณด๊ธฐ ์ข‹๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. ์ž‘์—… ๊ทœ๋ชจ๊ฐ€ ์ ์  ์ปค์ง€๋ฉด ๋‘๋ฒˆ์งธ๊ตฌ์กฐ์ฒ˜๋Ÿผ ์•ก์…˜๊ณผ ๋ฆฌ๋“€์„œ๋ฅผ ๋ถ„๋ฆฌํ•œ ๊ตฌ์กฐ๊ฐ€ ํŽธ๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

[ ๋ฆฌ๋•์Šค ๋ฏธ๋“ค์›จ์–ด ]

๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„, Flux Pattern์— ํ•ด๋‹น๋œ๋‹ค.
์•ก์…˜ -> ๋ฏธ๋“ค์›จ์–ด -> ๋ฆฌ๋“€์„œ ->์Šคํ† ์–ด-> ๋ทฐ ์ปดํฌ๋„ŒํŠธ ์—…๋ฐ์ดํŠธ

  • ์ฃผ๋กœ ๋น„๋™๊ธฐ ์š”์ฒญ ์‹œ์— ์‚ฌ์šฉ๋œ๋‹ค.(redux-thunk, redux-saga ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)

  • action์ด dispatch๋˜๋‹ค๊ฐ€ ํŠน์ •์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ dispatchํ•จ์ˆ˜ ๋ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋“ฑ ์—ฌ๋Ÿฌ ๊ตฌ์ฒด์ ์ธ ์ƒํ™ฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

  • Redux-saga : Generator์— ๊ธฐ๋ฐ˜ํ•œ ๋ฏธ๋“ค์›จ์–ด

    • Generator:
      ํ•จ์ˆ˜์˜ ํ๋ฆ„์„ yield ์„ ํ†ตํ•ด ํŠน์ • ๊ตฌ๊ฐ„์— ๋ฉˆ์ถฐ๋†“์•˜๋‹ค๊ฐ€ next()๋กœ ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฒฐ๊ณผ๊ฐ’์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.


profile
์•„ํ‹ฐํด๋ฆฌ์ŠคํŠธ - bit.ly/3wjIlZJ

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