๋ฐฐ์ด์
1. ์ ๋ฆฌ๋์ค๋ฅผ ๋ฐฐ์ธ๊น?
2. ์ ๋ฆฌ๋์ค๊ฐ ๋ฆฌ์กํธ ์ํ๊ณ์์ ์ค์ํ์ง?
3. ๋ฆฌ๋์ค๋ฅผ ๋ฆฌ์กํธ์์ ์ด๋ป๊ฒ ์ฌ์ฉํ์ง?
์ ๋ฆฌ๋์ค๋ฅผ ๋ฐฐ์ธ๊น?
๋ฆฌ๋์ค๋ ํฌ๋ก์ค ์ปดํฌ๋ํธ ๋๋ ์ฑ ์์ด๋ ์ํ๋ฅผ ์ํ ์ํ ๊ด๋ฆฌ ์์คํ ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ํ, ์ฆ ์ฐ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณ๊ฒฝํ ํ๋ฉด์ ํ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋๋ก ๋์์ค๋ค.
๋ฆฌ๋์ค๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ค์์ ์ปดํฌ๋ํธ๋ ์ฌ์ง์ด๋ ์ฑ ์ ์ฒด์์ ๊ด๋ฆฌํ๋๋ก ๋์์ค๋ค.
์์์ ๋ฐฐ์ด state๋ฅผ 3๊ฐ์ง๋ก ๊ตฌ๋ถํ ์ ์๋ค.
1. local state : ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ด์ ํ๋์ ์ปดํฌ๋ํธ์ ์ํ๋ UI์ ์ํฅ์ ๋ฏธ์น๋ ์ํ. (useState() ๋ useReducer() ์ฌ์ฉ)
2. cross-component state : ํ๋์ ์ปดํฌ๋ํธ๊ฐ ์๋๋ผ ๋ค์์ ์ปดํฌ๋ํธ์ ์ํฅ์ ๋ฏธ์น๋ ์ํ. (useState() ๋ useReducer() ์ฌ์ฉ && prop์ ์ฃผ๋ณ์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค. (prop ์ฒด์ธ ๊ตฌ์ถ => prop ๋๋ฆด๋ง))
3. app-wide state : ๋ค์์ ์ปดํฌ๋ํธ๊ฐ ์๋๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์ปดํฌ๋ํธ์ ์ํฅ์ ๋ฏธ์น๋ ์ํ. ex ์ฌ์ฉ์ ์ธ์ฆ (useState() ๋ useReducer() ์ฌ์ฉํ๊ณ , props ์ ์ฒด ์ฃผ๋ณ์ ํจ์๋ฅผ ์ ๋ฐ์ดํธํด์ ๊ทธ๊ฑธ ๊ด๋ฆฌํ ์๋ ์๋ค. )
ํฌ๋ก์ค ์ปดํฌ๋ํธ์ ์ฑ ์์ด๋ state์์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ์ ์ฒด props ํจ์๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋ก์ธ ์ ์๋ค.
ํฌ๋ก์ค ์ปดํฌ๋ํธ์ ์ฑ ์์ด๋ state๋ฅผ ๋จ์ํ ํ ์ ์๋ค.
=> ์ด๊ฑธ ๋ฆฌ์กํธ ์ปจํ ์คํธ๊ฐ ๋ณด์ํด์ฃผ๋ ์ญํ ์ ํ๋ค.
๋ฆฌ์กํธ ์ปจํ ์คํธ๋ฅผ ์ฐ๋ฉด prop ์ฒด์ธ์ด๋ prop ๋๋ฆด๋ง์ ํ์ง ์์ ์ ์๊ณ , ๋์ ์ Context์ ContextProvider ์ปดํฌ๋ํธ๋ฅผ ์ค์ฌ์ผ๋ก ์ํ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
์ ๋ฆฌ๋์ค๊ฐ ๋ฆฌ์กํธ ์ํ๊ณ์์ ์ค์ํ์ง?
์ด๋ ๊ฒ ๋ค์์ ์ปดํฌ๋ํธ์ ์ํฅ์ ๋ฏธ์น๋ state๋ฅผ ๊ด๋ฆฌํ๋ ๋ฆฌ์กํธ ์ปจํ ์คํธ๊ฐ ์๋๋ฐ ์ ๋ฆฌ๋์ค๊น์ง ๊ณต๋ถํด์ผํ ๊น??
๋ฆฌ์กํธ ์ปจํ ์คํธ๋ ์ ์ฌ์ ์ธ ๋จ์ ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค!
๋จ์ 1. ๋ฆฌ์กํธ ์ปจํ ์คํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์ ์ด ์์ฃผ ๋ณต์กํด์ง ์ ์๊ณ , ๋ฆฌ์กํธ ์ปจํ ์คํธ๋ฅผ ์ด์ฉํ ์ํ ๊ด๋ฆฌ๊ฐ ๋ณต์กํด์ง ์ ์๋ค.
๋ค์์ ์ปดํฌ๋ํธ๋ ์ ์ฒด ์ฑ์ ์ํฅ์ ๋ฏธ์น๋ ๋ง์ ๋ค์ํ state๊ฐ ์๋ค. ๊ทธ๋์ ๊ทธ๋ฐ state๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ๊ตฌ์ถํ ContextProvider ์ปดํฌ๋ํธ๊ฐ ๋ง์ด ์กด์ฌํ๊ฒ ๋๋ค.
๊ทธ๋ผ ์๋์ฒ๋ผ ๋... ๐
๋จ์ 2. ํ ๋ง๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ธ์ฆ ๊ฐ์ ์ ๋น๋ ์ ๋ฐ์ดํธ์๋ ์ฑ๋ฅ์ด ์ข์ง๋ง, ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์๋ ์ฑ๋ฅ์ด ์ข์ง ์๋ค. (์ ๋์ ์ธ state ํ์ฐ์ ๋์ฒดํ ์ ์๋ค. )
์ด์ ๋ฐํด ๋ฆฌ๋์ค๋ ์ ๋์ ์ธ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
ํ์ง๋ง ์ํ, ์คํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ด๋ฐ ๋จ์ ์ด ์๊ด ์์ ์๋ ์๋ค.
์๋ฌดํผ ๋ฆฌ๋์ค๋ ๋ฆฌ์กํธ ์ปจํ ์คํธ์ ๋์์ด๋ค.
๋ฆฌ๋์ค๋ฅผ ๋ฆฌ์กํธ์์ ์ด๋ป๊ฒ ์ฌ์ฉํ์ง?
๋ฆฌ๋์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ ํ๋์ ์ค์ ๋ฐ์ดํฐ(state) ์ ์ฅ์์ด๋ค.
์ ์ฅ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ ์ปดํฌ๋ํธ ์์์ ๊ทธ๊ฑธ ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ์ธ์ฆ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๋ฑ ๊ฑฐ๊ธฐ ์๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ฐ๋ฆฌ๋ ์ปดํฌ๋ํธ์์ ๊ทธ๊ฑธ ์ธ์งํด์ ๊ทธ์ ๋ง์ถฐ ๋์ํ๊ณ UI๋ฅผ ์ ๋ฐ์ดํธํ๊ธธ ์ํ๋ค.
๋ฐ์ดํฐ ๋ฐ์์ค๋ ๋ฐฉ๋ฒ
1. ์ด ์ปดํฌ๋ํธ๋ฅผ ์ํด ์ฐ๋ฆฌ ์ค์ ์ ์ฅ์์ ๋ํ ๊ตฌ๋ ์ ์ค์ ํ๋ค. (subscription)
2. ์ปดํฌ๋ํธ๊ฐ ์ ์ฅ์๋ฅผ ๊ตฌ๋ ํ๊ณ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ ์ฅ์๊ฐ ์ปดํฌ๋ํธ์ ์๋ ค์ค๋ค.
3. ๊ทธ๋ผ ์ปดํฌ๋ํธ๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฒ ๋๊ณ , ๊ทธ๊ฑธ ์ฌ์ฉํ ์ ์๋ค. (๋ฆฌ๋์ค ์ ์ฅ์์ ์ผ๋ถ๋ ๋ฐ๋ ๊ฒ์ด๋ค. ) ex) ํ์ฌ์ ์ธ์ฆ ์ํ ๊ฐ์ ๊ฒ
๋ฐ์ดํฐ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ
**์ปดํฌ๋ํธ๋ ์ ๋๋ก ์ค์ํ์ง ์๊ณ , ์ ๋๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์กฐ์ํ์ง ์๋๋ค. **
๊ทธ๋์ ๊ตฌ๋ ์ ํ๋ ๊ฒ์ด๊ณ , ๋ฐ์ดํฐ๋ ์ ๋๋ก ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ํ๋ฅด์ง ์๋๋ค!! (์ ์ด๋ ์ง์ ์ ์ธ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ทธ๋ ๋ค.)
์ปดํฌ๋ํธ๋ ์ ์ฅ์์ ์๋ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์กฐ์ํ์ง ์๋๋ค. ๋์ , ๋ฆฌ๋์๋ผ๋ ๊ฐ๋ ์ ์ด์ฉํ๋ค.
๋ฆฌ๋์ ํจ์๋ฅผ ์ค์ ํด์ผ ํ๋ค. ์ด ํจ์๋ ๋ณํ์ ๋ด๋นํ๋ค. (mutates store data)
**์ฌ๊ธฐ์์ ๋ฆฌ๋์ ํจ์๋ useReducer ํ ๊ณผ๋ ๋ค๋ฅด๋ค**
๋ฆฌ๋์ ํจ์๋ ์ ๋ ฅ์ ๋ฐ์์ ๊ทธ ์ ๋ ฅ์ ๋ณํํ๊ณ ์ค์ด๋ ํจ์์ด๋ค. ex) ์ซ์๋ก ๋ ๋ฆฌ์คํธ๋ฅผ ๊ทธ ์ซ์๋ค์ ํฉ์ผ๋ก ์ค์ผ ์ ์๋ค.
๋ฆฌ๋์ ํจ์๋ ์ ๋ ฅ์ ๋ณํํด์ ์๋ก์ด ์ถ๋ ฅ, ์๋ก์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฑ์ด๋ธ๋ค. => ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋
useReducer ๋ ํ ์ด ์ฌ์ฉํ๊ณ ๋ฆฌ๋์ ํจ์๋ ๋ฆฌ๋์ค๋ ์ฌ์ฉํ๋ค.
์ปดํฌ๋ํธ์ ๊ทธ ๋ฆฌ๋์ ํจ์๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
์ด๋ค ์ปดํฌ๋ํธ์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๊ทธ๊ฒ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ํธ๋ฆฌ๊ฑฐ ํ๋ค. ์ด๊ฑธ ์ด๋ป๊ฒ ์ฐ๊ฒฐํ ๊น??
์ปดํฌ๋ํธ๊ฐ ์ก์ ์ ๋ฐ์กํ๋ค. (dispatch)
๊ทธ๋์ ์ปดํฌ๋ํธ๊ฐ ์ด๋ค ์ก์ ์ ํธ๋ฆฌ๊ฑฐํ๋ค๊ณ ๋งํ ์ ์๋ค. ์ด๋ฐ ์ก์ ์ ๋จ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๊ณ , ๊ทธ๊ฒ ๋ฆฌ๋์๊ฐ ์ํํด์ผ ํ ์์ ์ ์ค๋ช ํ๋ค. => ๋ฆฌ๋์ค๋ ๊ทธ ์ก์ ์ ๋ฆฌ๋์๋ก ์ ๋ฌํ๊ณ ์ํ๋ ์์ ์ ๋ํ ์ค๋ช ์ ์ฝ๊ฒ ๋๋ค. ์ด์ด์ ๊ทธ ์์ ์ ๋ฆฌ๋์๊ฐ ์ํํ๊ฒ ๋๋ค.
**๋ฆฌ๋์ค ์๋ ๋ฐฉ์ ์ด ์ ๋ฆฌ**
์ปดํฌ๋ํธ๊ฐ ์ก์ ์ ๋ฐ์กํ๊ณ ๊ทธ ์ก์ ์๋ ์ํํด์ผ ํ ์์ ์ด ์ค๋ช ๋์ด ์๋ค.
ํ์ง๋ง ๊ทธ๊ฑธ ์ง์ ํ์ง ์๊ณ , ์ก์ ๋ค์ ๋ฆฌ๋์๋ก ์ ๋ฌํด์ ๊ทธ ์ก์ ์ด ์ํ๋ ๊ฑธ ๋ฆฌ๋์๊ฐ ํ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์, ๋ฆฌ๋์๋ ์๋ก์ด ์ํ(state)๋ฅผ ๋ฑ์ด๋ด๊ณ ๊ทธ๊ฒ ์ค์ ๋ก ๊ทธ ์ค์ ๋ฐ์ดํฐ ์ ์ฅ์์ ๊ธฐ์กด ์ํ๋ฅผ ๋์ฒดํ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฐ ๊ณผ์ ์ด ์ผ์ด๋๊ณ ๋ฐ์ดํฐ ์ ์ฅ์์ ์ํ๊ฐ ์ ๋ฐ์ดํธ ๋๋ฉด, ๊ตฌ๋ ์ค์ธ ์ปดํฌ๋ํธ๊ฐ ์๋ฆผ์ ๋ฐ๊ฒ ๋๊ณ , ์ปดํฌ๋ํธ๋ UI๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์๊ฒ ๋๋๊ฑฐ๋ค.
๐ ์๋ชป๋ ๊ฐ๋ ์ ๋ฌ์ด ์๋ค๋ฉด ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค. ์ ์ ์ฑ์ฅ์ ํฐ ๋์์ด ๋ฉ๋๋ค๐ค
'๐ฅFrontEnd > Redux' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
NEVER MUTATE REDUX!! (0) | 2022.08.13 |
---|---|
Redux Toolkit ์ฌ์ฉ๋ฐฉ๋ฒ (0) | 2022.07.28 |
๋ฆฌ๋์ค์์ ๊ฐ์ฅ ์ค์ํ ์ , ๊ธฐ์กด์ state๋ฅผ ๋ณ๊ฒฝํด์๋ ์๋๋ ์ด์ ! (0) | 2022.07.11 |
์ฝ๋๋ก ๋ณด๋ ๋ฆฌ๋์ค ๊ธฐ์ด (0) | 2022.07.10 |
TIL) REDUX, redux ๊ธฐ์ด, ๋ฆฌ๋์ค ๊ตฌ์กฐ, Redux์ ์ธ ๊ฐ์ง ์์น (0) | 2022.07.06 |