๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Redux

(5)
Redux-Toolkit ์—์„œ Saga ์‚ฌ์šฉํ•˜๊ธฐ (Feat. Typescript) ์˜ค๋Š˜ ํฌ์ŠคํŠธ๋Š” Redux-Toolkit ๊ณผ Redux-saga๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ๋กœ API๋ฅผ ๋ฐ›์•„์™€๋ณด์ž ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ํ•จ๊ป˜ ! ์šฐ์„  ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณด๊ธฐ์— ์•ž์„œ Saga์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž Redux-Saga ์— ๋Œ€ํ•˜์—ฌ redux-saga ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ, ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋ฐ์ดํ„ฐ fetching์ด๋‚˜ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ์— ์ ‘๊ทผํ•˜๋Š” ์ˆœ์ˆ˜ํ•˜์ง€ ์•Š์€ ๋น„๋™๊ธฐ ๋™์ž‘๋“ค์„, ๋” ์‰ฝ๊ณ  ์ข‹๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. saga๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋งŒ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ณ„๋„์˜ ์“ฐ๋ ˆ๋“œ๋ผ๊ณ  ๋ณด๋ฉด ๋˜๊ณ , redux-saga๋Š” ๋ฏธ๋“ค์›จ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— saga๋ผ๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ redux ์•ก์…˜์„ ํ†ตํ•ด ์‹คํ–‰๋˜๊ณ , ๋ฉˆ์ถ”๊ณ , ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๋˜ ๋ชจ๋“  redux ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ  redux..
Redux Toolkit ์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณด๊ธฐ ๋ฆฌ๋•์Šค๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค Velopert๋‹˜์˜ ๋ธ”๋กœ๊ทธ์—์„œ Redux Toolkit์ด ๋ฆฌ๋•์Šค ๊ฐœ๋ฐœ์˜ ํ•„์ˆ˜ํ’ˆ์ด๋ผ๋Š” ๊ธ€์„ ์ฝ๊ณ  Redux Toolkit์— ๋Œ€ํ•ด ํฅ๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค. Redux Toolkit์˜ ํƒ„์ƒ ์ด์œ  Redux Toolkit์€ ๋ฆฌ๋•์Šค๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ํ•ด๋‹น ๊ด€์‹ฌ์‚ฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋งŒ๋“ค์–ด ์กŒ๋‹ค๊ณ  ํ•œ๋‹ค Redux ์ €์žฅ์†Œ ๊ตฌ์„ฑ์ด ๋„ˆ๋ฌด ๋ณต์žก๋‹ค Redux๊ฐ€ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŽ์€ ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค Redux์—๋Š” ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค ( ์•ก์…˜ํƒ€์ž…, ์•ก์…˜์ƒ์„ฑํ•จ์ˆ˜, ๋ฆฌ๋“€์„œ 3๊ฐ€์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค ) ์ฆ‰ Redux Toolkit์€ ๋ฆฌ๋•์Šค๋ฅผ ๋”์šฑ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ๋„๊ตฌ์ด๋‹ค Redux Toolkit์˜ ํŠน์ง• Redux Toolkit์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์ œ๊ณต..
๋ฆฌ๋•์Šค์—์„œ Hooks ์‚ฌ์šฉํ•˜๊ธฐ ๋ฆฌ๋•์Šค ์Šคํ† ์–ด์™€ ์—ฐ๋™๋˜์–ด์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ connect ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  react-redux์—์„œ ์ œ๊ณตํ•˜๋Š” Hooks๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž useSelector๋กœ ์ƒํƒœ ์กฐํšŒํ•˜๊ธฐ useSelector Hook์„ ์‚ฌ์šฉํ•˜๋ฉด connect ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด ๋ฆฌ๋•์Šค์˜ ์ƒํƒœ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค ! import React, { useCallback } from 'react'; import { useSelector } from 'react-redux'; import Counter from '../components/Counter'; import { increase, decrease } from '../modules/counter'; const CounterContainer = ()..
๋ฆฌ๋•์Šค ์ž‘์—…ํ™˜๊ฒฝ ์„ค์ • ๋ฐ ์‚ฌ์šฉ๋ฐฉ๋ฒ• ๋ฆฌ๋•์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•ด ์„ค์น˜ํ•ด์•ผํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ ๋ฆฌ๋•์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์„ ์•Œ์•„๋ณด์ž ๐ŸŒŒ ์ž‘์—… ํ™˜๊ฒฝ ์„ค์ • ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•œ ์ดํ›„ $ yarn add redux react-redux yarn ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋•์Šค์™€ react-redux ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•œ๋‹ค ๐ŸŽจ ๋””์ž์ธํŒจํ„ด ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฆฌ๋•์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์€ Presentational and Container Component Pattern ์ด๋‹ค Container ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ๋•์Šค์™€ ์—ฐ๋™ํ•˜์—ฌ ๋ฆฌ๋•์Šค๋กœ๋ถ€ํ„ฐ ์ƒํƒœ๋ฅผ ๋ฐ›์•„ ์˜ค๊ธฐ๋„ ํ•˜๊ณ  ์Šคํ† ์–ด์— ์•ก์…˜์„ ๋””์ŠคํŒจ์น˜ ํ•˜๊ธฐ๋„ ํ•œ๋‹ค Presentational ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๊ณ , ๊ทธ์ € props๋ฅผ ๋ฐ›์•„์™€์„œ ํ™”๋ฉด์— UI๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค ..
๋ฆฌ๋•์Šค๋ž€ ๋ฌด์—‡์ธ๊ฐ€ ? ๋‚ด๊ฐ€ ๋ฆฌ๋•์Šค๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ์ด์œ  ์ฒ˜์Œ ๋ฆฌ์•กํŠธ ๊ณต๋ถ€๋ฅผ ํ•  ๋•Œ ๋ฆฌ์•กํŠธ๋ฅผ ๋ฐฐ์šฐ๊ณ  ๋‚˜์„œ ๋ฆฌ๋•์Šค๋ฅผ ๋ฐฐ์šฐ๋Š” ๊ณผ์ •์ด์—ˆ๋Š”๋ฐ ๋ฆฌ์•กํŠธ๋ฅผ ๋ฐฐ์šฐ๊ณ  ๋ฆฌ์•กํŠธ ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“  ์ดํ›„์— ๋ฆฌ๋•์Šค ๊ณต๋ถ€๋ฅผ ํ•ด์•ผ์ง€ ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ, ๊ทธ ๋•Œ๋Š” ๋ฆฌ๋•์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€, ๊ฐœ๋ฐœ์—์„œ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์˜€๋‹ค. ๋ฆฌ์•กํŠธ ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ State๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์ฒ™์ด๋‚˜ ๊ท€์ฐฎ์€ ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ ์ด๋ฅผ ํ•ด๊ฒฐํ•  ๋งŒํ•œ ๋„๊ตฌ๊ฐ€ ์—†๋‚˜ ์ฐพ์•„๋ดค๋”๋‹ˆ ๋ฆฌ๋•์Šค์˜€๊ณ  ์ด์ œ ๋ฆฌ๋•์Šค๋ฅผ ๋ฐฐ์›Œ๋ณด๋ ค ํ•œ๋‹ค ๐Ÿ˜‰ ๐Ÿ” ๋ฆฌ๋•์Šค ์†Œ๊ฐœ ๋ฆฌ๋•์Šค๋Š” ๊ฐ€์žฅ ์‚ฌ์šฉ๋ฅ ์ด ๋†’์€ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ€์ง„ state๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ, ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๊ต‰์žฅํžˆ ๋ฒˆ๊ฑฐ๋กœ์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌ์•กํŠธ์—์„œ ๋ฆฌ๋•์Šค..