1. ์ฃผ์ ์ ์ ์ด์
React๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ์ํ๊ด๋ฆฌ๊ฐ ํ์์ด๋ฉฐ ๊ทธ์ ๋ฐ๋ฅธ ๊ฐ์ข
๊ธฐ๋ฅ๋ค์ ์์งํ๊ณ ์์ด์ผํ๋ค. ์ด์ ๋ํด ์์ง ๋ชปํ๋ฉด React๋ฅผ ์ฌ์ฉํ์ง ์๋ ์์ค์ด๋ฉฐ, ํ์
์ ํ๋๋ฐ ์์ด ํฐ ์ง์ฅ์ด ๋๊ธฐ์ ์ด๋ฒ ๊ธฐํ์ ์ํ๊ด๋ฆฌ์ ๋ํ ์ ํํ ์ ์๋ฅผ ํ์ตํ๊ณ , React์ ์ํ๊ด๋ฆฌ ๋ฐฉ๋ฒ์๋ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง ์ดํด๋ณด๋๋ก ํ์.
2. ์ํ๊ด๋ฆฌ๋
2-1. ์ํ๊ด๋ฆฌ์ ์ ์
- ์ํ(State) : ์ปดํผ๋ํธ ๋ด๋ถ์์ ๊ด๋ฆฌ๋๋ฉฐ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ ๋์ ์ํฅ์ ๋ฏธ์น๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ์๋ฏธ. ์ฆ, ๋ณํํ๋ ๋ฐ์ดํฐ๋ผ๊ณ ์ดํดํ๋ฉด ๋๋ค. (ex, ์ผํ๋ชฐ ์ฌ์ดํธ์์ ๊ตฌ๋งคํ ๋ฌผ๊ฑด์ ์๋์ ๋๋ฆฌ๊ณ ์ค์ด๋ ํ์๋ฅผ ์ํ๊ฐ ๋ณํํ๋ค๊ณ ํ๋ค.)
- ์ํ๊ด๋ฆฌ : ์ํ๋ ์ด๋ ์ปดํผ๋ํธ์์๋ ์ผ๊ด๋์ด์ผ ํ๋ค. ์ด๋ฅผ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ด๋ผ ํ๋ค. ์๋ํ๋ฉด, ์ํ๊ฐ ์ปดํผ๋ํธ๋ง๋ค ๋ค๋ฅด๋ค๋ฉด, ์ ์ ๋ ๊ด๋ฆฌ์๊ฐ ๋ฐ์๋ค์ด๋ ๋ฐ์ดํฐ์ ์ฐจ์ด๊ฐ ์๊ฒจ ์ํต์ ์ฐจ์ง์ด ์๊ธฐ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ์ํ๋ฅผ ์ผ๊ด๋๊ฒ ๊ด๋ฆฌํด์ผํ๋ฉฐ, React์ ๊ฒฝ์ฐ, **์ ๋ขฐํ ์ ์๋ ๋จ์ผ ์ถ์ฒ(๋์ผํ ๋ฐ์ดํฐ๋ ํญ์ ๊ฐ์ ๊ณณ์์ ๊ฐ์ ธ์จ๋ค)**๋ผ๋ ๋ฐฉ๋ฒ๋ก ์ผ๋ก ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ค.
2-2. ์ํ์ ์ข
๋ฅ
- ์ง์ญ์ํ(localState) : ํน์ ์ปดํผ๋ํธ ์์์๋ง ๊ด๋ฆฌ๋๋ ์ํ๋ฅผ ์๋ฏธํ๋ค. ์ด๋ ์ฃผ๋ก ์์ ํ๋ก์ ํธ์ฒ๋ผ ์ข์ ์์ญ์์๋ง ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ๋ค์ด๋ค.
- ์ปดํผ๋ํธ ๊ฐ ์ํ: ๋ค์์ ์ปดํผ๋ํธ์์ ์ฌ์ฉ๋๊ณ ์ํฅ์ ์ฃผ๋ ๋ฐ์ดํฐ๋ค์ ์๋ฏธํ๋ค. ๋ํ์ ์ธ ์์๋ก ์ฌ๋ฌ ์ปดํผ๋ํธ๊ฐ ๋์์ ์ฌ์ฉํ๋ ๋ชจ๋ฌ์ฐฝ ๋ฑ์ด ์๋ค.
2๊ฐ ์ด์์ ์ปดํผ๋ํธ๊ฐ์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๊ฒฝ์ฐ, ์์ ์ปดํผ๋ํธ์์ ํ์ ์ปดํผ๋ํธ๋ก๋ง ์ํ๋ฅผ ์ ๋ฌํ๋ฉฐ, ์ด๋ฅผ Props Driling์ด๋ผ ํ๋ค.
- ์ ์ญ ์ํ(globalState) : ํ๋ก์ ํธ ์ ์ฒด์ ์ํฅ์ ๋ผ์น๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ค. ๋ํ์ ์ธ ์๋ก, ๋ชจ๋ ์ปดํผ๋ํธ์์ ์ฌ์ฉ๋๋ ํ์ด์ง์ ํค๋ ์ปดํผ๋ํธ ๋ฑ์ด ์๋ค.
- ์ํ๊ด๋ฆฌ๊ฐ ํ์ํ ์ด์ : ๊ฑฑ ์ปดํผ๋ํธ๊ฐ ๋ถ๋ชจ์์ ๊ด๊ณ๋ก ๋์ด์์ง ์์ ์ด์ ๊ฐ ์ปดํผ๋ํธ๊ฐ์ ์ง์ ์ ์ธ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ด๋ ต์ฐ๋ฉฐ, ๊ตฌ์กฐ๊ฐ ๋ณต์กํ์ฌ Props Driling์ด ๋ง์์ง๋ฉด Props์ ์ถ์ฒ๋ฅผ ์ฐพ๊ธฐ ์ด๋ ค์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ด๋ฆฌํด์ค์ผ ํ๋ค.
3. React์ ์ํ๊ด๋ฆฌ
3-1. Context API
- 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 ์ ๊ณต๋ฐ์ ์ ์ญ์ํ๋ฅผ ๋ฐ์์ ์ฌ์ฉํ๋ ์ญํ ์ ํ๋ค.