๋ชฉ์ฐจ
1. ์ฃผ์ ์ ์ ์ด์
2. ์ํ๊ด๋ฆฌ๋
- ์ํ๊ด๋ฆฌ์ ์ ์
- ์ํ์ ์ข ๋ฅ
3. React์ ์ํ๊ด๋ฆฌ
- Context API
- Redux
- Reacoil ๋ผ์ด๋ธ๋ฌ๋ฆฌ
React๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ์ํ๊ด๋ฆฌ๊ฐ ํ์์ด๋ฉฐ ๊ทธ์ ๋ฐ๋ฅธ ๊ฐ์ข ๊ธฐ๋ฅ๋ค์ ์์งํ๊ณ ์์ด์ผํ๋ค. ์ด์ ๋ํด ์์ง ๋ชปํ๋ฉด React๋ฅผ ์ฌ์ฉํ์ง ์๋ ์์ค์ด๋ฉฐ, ํ์ ์ ํ๋๋ฐ ์์ด ํฐ ์ง์ฅ์ด ๋๊ธฐ์ ์ด๋ฒ ๊ธฐํ์ ์ํ๊ด๋ฆฌ์ ๋ํ ์ ํํ ์ ์๋ฅผ ํ์ตํ๊ณ , React์ ์ํ๊ด๋ฆฌ ๋ฐฉ๋ฒ์๋ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง ์ดํด๋ณด๋๋ก ํ์.
์ง์ญ์ํ(localState) : ํน์ ์ปดํผ๋ํธ ์์์๋ง ๊ด๋ฆฌ๋๋ ์ํ๋ฅผ ์๋ฏธํ๋ค. ์ด๋ ์ฃผ๋ก ์์ ํ๋ก์ ํธ์ฒ๋ผ ์ข์ ์์ญ์์๋ง ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ๋ค์ด๋ค.
์ปดํผ๋ํธ ๊ฐ ์ํ: ๋ค์์ ์ปดํผ๋ํธ์์ ์ฌ์ฉ๋๊ณ ์ํฅ์ ์ฃผ๋ ๋ฐ์ดํฐ๋ค์ ์๋ฏธํ๋ค. ๋ํ์ ์ธ ์์๋ก ์ฌ๋ฌ ์ปดํผ๋ํธ๊ฐ ๋์์ ์ฌ์ฉํ๋ ๋ชจ๋ฌ์ฐฝ ๋ฑ์ด ์๋ค.
2๊ฐ ์ด์์ ์ปดํผ๋ํธ๊ฐ์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๊ฒฝ์ฐ, ์์ ์ปดํผ๋ํธ์์ ํ์ ์ปดํผ๋ํธ๋ก๋ง ์ํ๋ฅผ ์ ๋ฌํ๋ฉฐ, ์ด๋ฅผ Props Driling์ด๋ผ ํ๋ค.
์ ์ญ ์ํ(globalState) : ํ๋ก์ ํธ ์ ์ฒด์ ์ํฅ์ ๋ผ์น๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ค. ๋ํ์ ์ธ ์๋ก, ๋ชจ๋ ์ปดํผ๋ํธ์์ ์ฌ์ฉ๋๋ ํ์ด์ง์ ํค๋ ์ปดํผ๋ํธ ๋ฑ์ด ์๋ค.
์ํ๊ด๋ฆฌ๊ฐ ํ์ํ ์ด์ : ๊ฑฑ ์ปดํผ๋ํธ๊ฐ ๋ถ๋ชจ์์ ๊ด๊ณ๋ก ๋์ด์์ง ์์ ์ด์ ๊ฐ ์ปดํผ๋ํธ๊ฐ์ ์ง์ ์ ์ธ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ด๋ ต์ฐ๋ฉฐ, ๊ตฌ์กฐ๊ฐ ๋ณต์กํ์ฌ Props Driling์ด ๋ง์์ง๋ฉด Props์ ์ถ์ฒ๋ฅผ ์ฐพ๊ธฐ ์ด๋ ค์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ด๋ฆฌํด์ค์ผ ํ๋ค.
Context API : React ์ปดํฌ๋ํธ ํธ๋ฆฌ ์์์ ์ ์ญ ์ํ๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ๋ง๋ค์ด์ง ๋ฐฉ๋ฒ์ด๋ค.
๋ช
์นญ์ API์ด๊ธฐ๋ ํ์ง๋ง, ์ค์ง์ ์ธ ๊ด๋ฆฌ๋ API๊ฐ ์๋๋ผ useState๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ค.
useState() :
cosnt [state, setState] = useState()
์ ํํ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
์์์์๋ถํฐ state๋ผ๋ ์ํ๋ณ์์ ์ํ์ ๋ณํ๋ฅผ ์ฃผ๋ setState๋ผ๋ ํจ์๊ฐ ์๋ค. useState()์ ํ๋ผ๋ฏธํฐ์๋ ์ด๊ธฐ state๊ฐ์ด ๋ค์ด๊ฐ๋ฉฐ, ์ดํ setState๋ฅผ ํตํด state์ ๊ฐ์ ๋ณํ๋ฅผ ์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค.
useState()๋ ์ํ๋ฅผ ์๋ก ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ๊ฒ์ด ์๋๋ผ ๋จ์ ๋น๊ต๋ฅผ ํตํด ์ํ๋ฅผ ์
๋ฐ์ดํธ ์ํค๋ ์๋ฆฌ๋ก ์๋ํ๋ค.
์ฆ, ๋์ผํ ๋ฐ์ดํฐ์ key๊ฐ์ด๋ฉด ํค์ value๊ฐ์ ์ฐจ์ด๋ฅผ ๋น๊ตํ์ฌ ์ต์ ์ value๊ฐ์ผ๋ก ๊ฐฑ์ ํ๋ฉฐ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค.
์ด๋ ์ค๊ฐ์ ์๋ ์์๋ค์๊ฒ props๋ฅผ ๋๊ธฐ์ง ์๊ณ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ ์ ์๊ธฐ์ props Drilling์ ํผํ ์ ์์ผ๋ฉฐ, ์ฃผ๋ก ์ ์ญ์ ์ผ๋ก ์ฐ์ด๋ ๋ฐ์ดํฐ๋ค์ ์ฌ์ฉํ ๋ ์์ฃผ ์ฌ์ฉ๋๋ค.
useEffect() :
context API์ ๊ตฌ์กฐ : context, provider, comsumer ๋ก ๊ตฌ์ฑ
context : ์ ์ญ์ํ๋ฅผ ์ ์ฅํ๋ ๊ณณ์ผ๋ก , ๋ด๋ถ์๋ provider์ consumer๋ก ๊ตฌ์ฑ๋์ด์๋ค.
provider : ์ ์ญ์ํ๋ฅผ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ค. ์ฃผ๋ก Root Component(index.js / app.js)์์ ์ ์๋๋ค.
consumer ์ ๊ณต๋ฐ์ ์ ์ญ์ํ๋ฅผ ๋ฐ์์ ์ฌ์ฉํ๋ ์ญํ ์ ํ๋ค.
Redux : ๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ์ ์ํ ์์ธก ๊ฐ๋ฅํ ์ํ ์ปจํ
์ด๋๋ผ๊ณ ์ ์ํ๋ค.
์ด๋ฅผ ํ์ด ์ค๋ช
ํ๋ฉด, ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋๊ตฌ, ์ฆ, ์ดํ๋ฆฌ์ผ์ด์
์ ์ฒด์ ๋ํ ์ค์ ์ ์ฅ์ ์ญํ ์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
'Store','Action', 'Reducer'๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
Store๋ ์ ์ญ์ํ๋ฅผ ์ ์ฅํ๋ ์ ์ฅ์ ์ญํ ์ ํ๋ฉฐ, ์ค์ง Reducer๋ฅผ ํตํด์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ์ฃผ๋ก index.js์ ์ ์๋๋ฉฐ Store๋ ์ค์ง 1๊ฐ๋ง ์กด์ฌํ ์ ์๋ค.
Action์ Store์ ์ ์ฅ๋ ์ํ์ ๋ณํ๋ฅผ Reducer์ ๋ช
๋ นํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ด๋ค. ๋ณํ๋ฅผ ์ฃผ๊ธฐ ์ํด dispatch๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Reducer์๊ฒ ์ ๋ฌ๋๋ค.
Reducer๋ ๋ณํ๋ฅผ ๊ฐ์งํ์ฌ ์ํ๋ฅผ ๋ณํ์ํค๋ ์ญํ ์ ํ๋ ์์ํจ์๋ก์, ์ ์ญ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์
๋ฐ์ดํธ์ํจ๋ค. ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์ '์ด๋ฒคํธ๋ฆฌ์ค๋'์ ๋์ผํ ์ญํ ์ ํ๋ค๊ณ ํ์
ํด๋ ์ข๋ค.
๋ค๋ง, Redux์ ๊ฒฝ์ฐ, ์ํ๊ด๋ฆฌ๋ฅผ ํ ๋, ์ด์ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํค๋ ๊ฒ์ด ์๋ ์๋ก์ด ์ํ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ค๋ ์ ์ ๋ช
์ํด์ผํ๋ค.
*์์ํจ์ : ๋ค๋ฅธ ์ธ๋ถ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์๋, ์ด๋ค ๋์ผํ ์ธ์์ ๋ํด ํญ์ ๋์ผํ ๊ฐ์ ๋ฆฌํดํ๋ ํจ์์ด๋ค.
์์ ์ธ๊ธํ Redux๋ ๋จ๋ฐฉํฅ์ ํ๋ฆ์์ ์ํ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ์ง๋ง, ์ด๋ฅผ ์ํ action, reducer์ ๊ฐ์ ์ด๊ธฐ ์ธํ ์ด ์๋นํ ๋ฒ๊ฑฐ๋กญ๊ณ React์ ์ ๋ง์ง ์๋๋ค๋ ์ฌ๋ก ์ด ์ฃผ๋ฅผ ์ด๋ฃจ์๋ค.
React์ ์ํ๊ด๋ฆฌ๋ฅผ ๋ณด๋ค React์ค๋ฝ๊ฒ(hook์ ์ ์ญ์ผ๋ก ํ์ฅ์ํด) ํ๊ธฐ ์ํด, ๋ฉํ(์ ํ์ด์ค๋ถ)์ฌ์์ ์ ์ํ React ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
Recoil์ atom๊ณผ selector๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค.
atom์ ๊ตฌ๋
, ์ต์ ๋ฒ์ ๊ฐ์ ๊ฐ๋
์ ์๊ฐํ ํ์์์ด hook์ ์ฌ์ฉํ๋ฏ์ด ์ฌ์ฉํ๋ฉด ๋๋ค.
hook๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ผ๋ฉด ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
selector๋ฅผ ์ด์ฉํ๋ฉด ๋ฆฌ๋์ ์์ด ๋ณต์กํ ์ฐ์ฐ๋ ๊ฐ๋จํ๊ฒ ํ ์ ์๋ค.