Input + Output = True
React - redux ์ดํดํ๊ธฐ (๋ฆฌ๋์ค ๊ฐ๋ ์ ๋ฆฌ) ๋ณธ๋ฌธ
๐ React - ๋ฆฌ๋์ค(redux) ์ดํดํ๊ธฐ
โ Redux๋?
Redux
์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ๋ฐ์ดํธํ๊ธฐ ์ํ ํจํด ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
์ํ๊ฐ ์์ธก ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก๋ง ์ ๋ฐ์ดํธ๋ ์ ์๋๋ก ํ๋ ๊ท์น๊ณผ ํจ๊ป
์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํด์ผ ํ๋ ์ํ์ ๋ํ ์ค์ ์ง์ค์ ์ ์ฅ์ ์ญํ ์ ํฉ๋๋ค.
-redux ๊ณต์๋ฌธ์-
ํ ๋ง๋๋ก ๋ฆฌ๋์ค๋ "state ์ฌ์ฉ์ ๋ ํธํ๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ"๋ผ๊ณ ์ดํดํ ์ ์๋ค
Local State
๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ค ๋ณด๋ฉด
A ์ปดํฌ๋ํธ ์์ ์๋ data๋ผ๋ state๋ฅผ(Local State) B ํน์ C ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๊ธฐ ์ํด
A ์ปดํฌ๋ํธ์์ B๋ C ํน์ B๋ฅผ ํตํด์ C๋ก ์ ๋ฌํด์ฃผ์ด์ผ ํ๋ ๋ถํธํจ์ด ์๋ค
๋ง์ฝ ๊ทธ depth๊ฐ ๊น๋ค๋ฉด? ์ด๋ฏธ์ง(Without Redux)์์ ์ ์ ์๋ฏ์ด
์ ๋ฌ & ์ ๋ฌ & ์ ๋ฌ์ ๊ณ์ ํด์ฃผ์ด์ผ ํ๋ค(props drilling)
Local State๋ฅผ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋
ํ ๋จ๊ณ์ฉ ์ ๋ฌ ํด์ผํ๋ ๋ถํธํจ์ด ์๋ ๊ฒ์ด๋ค!
Global State
Local State์ ๋ถํธํจ์ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์
State ๊ด๋ฆฌ๋ฅผ Local์ด ์๋ Globalํ๊ฒ ๋ฐ๊พธ๋ ๊ฒ์ด๋ค
๊ทธ๋์ ๋ฆฌ๋์ค(Redux)๊ฐ ์กด์ฌํ๋ค!
๋ฆฌ๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ๋ํด ์ดํด๊ฐ ๋์ผ๋ฆฌ๋ผ ์๊ฐํ๋ค
์ด์ ๋น ๋ฅด๊ฒ ๋ฆฌ๋์ค๋ฅผ ์์๋ณด์
โ redux์ 3๊ฐ์ง ๊ท์น
1. Single source of truth(๋จ์ผ ์คํ ์ด)
- ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ํ๋์ ์คํ ์ด(๋ฐ์ดํฐ ๊ณต๊ฐ)๊ฐ ์๋ค.
2. State is read-only(์ฝ๊ธฐ ์ ์ฉ ์ํ)
- ์ํ ์ ๋ฐ์ดํธ๋ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค. (๋ถ๋ณ์ฑ ์ ์ง)
- ์ข์ ์ฑ๋ฅ์ ์ ์งํ๊ธฐ ์ํด ์์ ๋น๊ต(shallow equality) ๊ฒ์ฌ๋ฅผ ํ๋๋ฐ, ์ด๋ฅผ ์ํด ๋ถ๋ณ์ฑ์ ์ ์งํด์ผ ํ๋ค
3. Changes are made with pure functions(๋ฆฌ๋์๋ ์์ํจ์์ฌ์ผ ํ๋ค)
- ๋ณํ๋ฅผ ์ผ์ผํค๋ ๋ฆฌ๋์ ํจ์๋ ์์ ํจ์์ฌ์ผ ํ๋ค
*์์ ํจ์์ ์กฐ๊ฑด
- ์ฌ์ด๋ ์ดํํธ๋ฅผ ๋ง๋ค์ง ์๋๋ค (ํจ์ ์ธ๋ถ์ ์ํฅ์ ๋ผ์น๋ฉด ์๋๋ค)
- ๊ฐ์ ์ ๋ ฅ ๊ฐ์ด ์ฃผ์ด์ก์ ๋, ์ธ์ ๋ ๊ฐ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฆฌํดํ๋ค
โ redux์ ํต์ฌ ์์ 5๊ฐ์ง
- Action
- Reducer
- Store
- Dispatch
- Subscribe
Action
State ํ๋ ์ ์ ์์ญ
Reducer
๋ณํ๋ฅผ ์ผ์ผํค๋ ํจ์ (action์ ํตํด ์ ์ํ ํ๋์ ์คํ)
์ฆ, ๋ฐ์ดํฐ(state)๋ฅผ ์์ ํ๋ ํจ์
Store
์ดํ๋ฆฌ์ผ์ด์
์ ๋จ ํ๋๋ง ์กด์ฌํ๋ฉฐ
์คํ ์ด ์์๋ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ํ์ ๋ฆฌ๋์๊ฐ ๋ค์ด๊ฐ ์๊ณ , ๋ด์ฅํจ์๋ฅผ ์ ๊ณตํ๋ค.
์ปดํฌ๋ํธ์์ ์ํ ์ ๋ณด๊ฐ ํ์ํ ๋ ์คํ ์ด์ ์ ๊ทผํ๋ค.
Dispatch
์คํ ์ด์ ๋ด์ฅํจ์์ด๋ฉฐ
๋์คํจ์น๋ ‘์ก์
์ ๋ฐ์ ์์ผ ์ฃผ๋ ๊ฒ’์ผ๋ก ์ดํดํ๋ฉด ๋๋ค
store์์ reducerํจ์๋ฅผ ์คํ์์ผ state๋ฅผ ์
๋ฐ์ดํธํ๋ค
dispatch(action) ๊ณผ ๊ฐ์ ํํ๋ก ์ก์
๊ฐ์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ ํธ์ถํ๋ค
Subscribe
subscribe๋ ๋ณํ๋ฅผ ๊ฐ์งํ๋ค
dispatch๋ฅผ ํตํด์ reducer์ state๋ฅผ ๋ณ๊ฒฝ์ํฌ ๋ ๋ง๋ค ๋ณํ๋ฅผ ๊ฐ์งํ๋ค
subscribe์ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ๋ ํจ์๋ ์ก์ ์ด ๋์คํจ์น๋์ด ์ํ๊ฐ ์ ๋ฐ์ดํธ๋ ๋ ๋ง๋ค ํธ์ถ๋๋ค
โ redux์ ํ๋ฆ
1. view ์์ ์ก์ ์ด ์ผ์ด๋๋ค.
2. action ๊ฐ์ฒด๊ฐ dispatch() ๋ฉ์๋์ ์ ๋ฌ๋๋ค.
3. dispatch(์ก์ )์ ํตํด action์ด ์ผ์ด๋๊ฒ ๋๋ค.
4. action์ ์ํ reducer ํจ์๊ฐ ์คํ๋๊ธฐ ์ ์ middleware๊ฐ ์๋ํ๋ค.
5. middleware์์ ๋ช ๋ น ๋ด๋ฆฐ ์ผ์ ์คํ ํ, reducer ํจ์๋ฅผ ์คํํ๋ค.
6. reducer์ ์คํ ๊ฒฐ๊ณผ ์๋ก์ด ๊ฐ(state)์ store์ ์ ์ฅํ๋ค.
7. store์ state๋ฅผ subscribeํ๊ณ ์๋ UI์ ๋ณ๊ฒฝ๋ ๊ฐ์ ์ค๋ค.
๐ก redux ์ ๋ฆฌ
-์ค์ ์ง์ค์ State ์ ์ฅ์ ์ญํ ์ ํ๋ค
-๋ฆฌ๋์ค์๋ 3๊ฐ์ง ๊ท์น์ด ์๋ค (๋จ์ผ ์คํ ์ด, ์ฝ๊ธฐ ์ ์ฉ ์ํ, ์์ํจ์ ๋ฆฌ๋์)
-๋ฆฌ๋์ค์๋ 5๊ฐ์ง ํต์ฌ ์์๊ฐ ์๋ค (Action, Reducer, Store, Dispatch, Subscribe)
โ ๋ง๋ฌด๋ฆฌ
๋ฆฌ์กํธ์ ๋ฆฌ๋์ค๋ ๋ณ๊ฐ๋ค
๋ฆฌ๋์ค๋ ๋ฆฌ์กํธ์ ๋ถ๊ฐ๊ธฐ๋ฅ์ด ์๋๋ผ js, vue, angular ๋ฑ์์๋ ์ฌ์ฉํ ์ ์๋ ๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ด๋ค
ํ์ง๋ง ๋ฆฌ์กํธ์์ ๋ฆฌ๋์ค ๊ฐ์ ๊ฐ๋ ์ ๊ผญ ํ์ํ๋ค (๋ฐ์ดํฐ์ ๋จ๋ฐฉํฅ ํ๋ฆ ๋๋ฌธ)
์ฆ, ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฆฌ์กํธ์์ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ถํธํจ์ ๊ฐ์ ์ํค๊ณ
๊ฐ๋ฐ์ ํธ์์ฑ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋ฆฌ์กํธ ๊ฐ๋ฐ์์ ์ํ๊ด๋ฆฌ ๋๊ตฌ๋ ํ์๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ฐธ๊ณ
https://react.vlpt.us/redux/01-keywords.html
https://ko.redux.js.org/introduction/getting-started
'๐จFrontEnd > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฆฌ์กํธ ๋ผ์ดํ์ฌ์ดํด(ํด๋์คํ vs ํจ์ํ), React hooks (0) | 2023.01.08 |
---|---|
redux persist ์ฌ์ฉ๋ฒ (๋ฆฌ๋์ค ์๋ก๊ณ ์นจ ๋ฐ์ดํฐ ์ ์ง) (0) | 2023.01.05 |
React - State, Props, ๋ฆฌ๋ ๋๋ง ๋ฐ์ ์กฐ๊ฑด (0) | 2023.01.02 |
๋ฆฌ์กํธ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ํด์ (feat. useEffect) (0) | 2022.12.28 |
๋ฆฌ์กํธ useRef ๋ (0) | 2022.12.28 |