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๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ง์ผ๋ก ์ถฉ๋ถํ์ง๋ง, ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ํ ๊ด๋ฆฌ๊ฐ ๊ต์ฅํ ๋ฒ๊ฑฐ๋ก์์ง ์ ์๋ค. ๋ฆฌ์กํธ์์ ๋ฆฌ๋์ค.. ์ด์ 1 ๋ค์