Redux
Reference: redux docs, velopert
1. Redux ๋?
React ์ํ๊ณ์์ ๊ฐ์ฅ ์ฌ์ฉ๋ฅ ์ด ๋์ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Redux๋ฅผ ์ฌ์ฉํ๋ฉด
์ปดํฌ๋ํธ๋ค์ ์ํ ๊ด๋ จ ๋ก์ง๋ค์ ๋ค๋ฅธ ํ์ผ๋ค๋ก ๋ถ๋ฆฌ์์ผ์ ๋์ฑ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ ํ ์ ์์ผ๋ฉฐ
๊ธ๋ก๋ฒ ์ํ ๊ด๋ฆฌ๋ ์์ฝ๊ฒ ํ ์ ์๋ค
2. Redux vs Context API
Redux๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ Context API์ ์ฐจ์ด
2-1. Middleware
Redux์๋ middleware๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํ๋ค
Redux์ middleware๋ฅผ ์ฌ์ฉํ๋ฉด action object๊ฐ reducer์์ ์ฒ๋ฆฌ๋๊ธฐ ์ ์ ์ํ๋ ์์ ์ ์ํํ ์ ์๋ค
ex)
ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ action์ด ๋ฌด์๋๊ฒ ๋ง๋ค๊ธฐ
action์ console์ ์ถ๋ ฅํ๊ธฐ
action์ด dispatch ๋์์ ๋, ์ด๊ฒ์ ์์ ํด์ reducer์ ์ ๋ฌ๋๊ฒ ๋ง๋ค๊ธฐ
ํน์ action์ด ๋ฐ์ํ์ ๋
์ด๊ฒ์ ๊ธฐ๋ฐํ์ฌ ๋ค๋ฅธ action์ด ๋ฐ์๋๊ฒ ํ๊ธฐ
ํน์ JavaScript ํจ์๋ฅผ ์คํํ๊ธฐ
Middleware๋ ์ฃผ๋ก ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ ๋ ๋ง์ด ์ฌ์ฉ๋๋ค
2-2. Useful Functions & Hooks
connect
ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด redux์ ์ํ ๋๋ action ์์ฑ ํจ์๋ฅผ component์ props๋ก ๋ฐ์์ฌ ์ ์๋คuseSelector
,useDispatch
,useStore
๊ณผ ๊ฐ์ Hooks๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฝ๊ฒ ์ํ๋ฅผ ์กฐํํ๊ฑฐ๋ action์ dispatch ํ ์ ์๋ค
2-3. Global State
Context API๋ฅผ ์ฌ์ฉํด์ global state ๋ฅผ ๊ด๋ฆฌํ ๋์๋ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ฅ๋ณ๋ก
Context
๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ๋ค๋ฉด,Redux๋ ๋ชจ๋ Global state๋ฅผ ํ๋์ ์ปค๋ค๋ object์ ๋ฃ์ด์ ์ฌ์ฉํ๋ ๊ฒ์ด ํ์์ด๋ค
์ด๊ฒ์ ํตํด ๋งค๋ฒ
Context
๋ฅผ ์๋ก ๋ง๋๋ ๋ถํธํจ์ ํผํ ์ ์๋ค!
3. Key Concepts
3-1. Action
State์ ์ด๋ค ๋ณํ๊ฐ ํ์ํ ๋, action์ ๋ฐ์์ํจ๋ค
Action์ ํ๋์ ๊ฐ์ฒด๋ก ํํ๋๋ค
ex)
Action ๊ฐ์ฒด๋
type
์ ํ์๋ก ๊ฐ์ ธ์ผ ํ๊ณ , ๊ทธ ์ธ์ ๊ฐ๋ค์ ์ํ๋๋๋ก ๋ฃ์ ์ ์๋คex)
ex)
3-2. Action Creator
Action ์์ฑ ํจ์๋ ๋ง ๊ทธ๋๋ก aciton์ ๋ง๋๋ ํจ์๋ค
Parameter๋ฅผ ๋ฐ์์์ action ๊ฐ์ฒด ํํ๋ก ๋ง๋ค์ด์ค๋ค
ex)
Action Creater
๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋์ค์ component์์ action์ ์ฝ๊ฒ ๋ฐ์์ํค๊ธฐ ์ํด์๋ค๊ทธ๋์ ๋ณดํต
export
keyword ๋ถ์ฌ์ ๋ค๋ฅธ file์์ ํด๋น ํจ์๋ฅผ ๋ถ๋ฌ๋ด์ ์ฌ์ฉํ๋ค
Redux์์
Action Creater
์ฌ์ฉ์ด ํ์๋ ์๋๋ค!Action์ ๋ฐ์์ํฌ ๋๋ง๋ค action ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์ธ ์๋ ์๋ค
3-3. Reducer
Reducer๋ ๋ณํ๋ฅผ ์ผ์ผํค๋ ํจ์๋ค
๋ ๊ฐ์ง parameter๋ฅผ ๋ฐ์์จ๋ค
state
action
ex)
Reducer
๋ ํ์ฌ ์ํ์ ์ ๋ฌ ๋ฐ์ action์ ์ฐธ๊ณ ํ์ฌ ์๋ก์ด ์ํ๋ฅผ ๋ง๋ค์ด์ returnํ๋ค
3-4. Store
Rexux์์๋ ํ application๋น ํ๋์ store๋ฅผ ๋ง๋ค๊ฒ ๋๋ค
Store ์์๋ ํ์ฌ์ app ์ํ์ reducer๊ฐ ๋ค์ด๊ฐ์๊ณ , ๊ฑฐ๊ธฐ์ ๋ช๊ฐ์ง ๋ด์ฅ ํจ์๋ค์ด ์๋ค
3-5. Dispatch
dispatch๋ store์ ๋ด์ฅ ํจ์ ์ค ํ๋๋ค
dispatch๋ action์ ๋ฐ์ ์ํค๋ ์ญํ ์ ํ๋ค
dispatch ํจ์์๋ action์ parameter๋ก ์ ๋ฌํ๋ค
ex)
dispatch๋ฅผ ํธ์ถํ๋ฉด store๋ reducer๋ฅผ ์คํ์์ผ์ ํด๋น action์ ์ฒ๋ฆฌํ๋ logic์ด ์๋ค๋ฉด, ๊ทธ action์ ์ฐธ๊ณ ํ์ฌ ์๋ก์ด ์ํ๋ฅผ ๋ง๋ค์ด์ค๋ค
3-6. Subscribe
subscribe๋ dispatch์ฒ๋ผ store์ ๋ด์ฅ ํจ์ ์ค ํ๋์ด๋ค
subscribe ํจ์์ ํน์ ํจ์๋ฅผ ์ ๋ฌํด์ฃผ๋ฉด, action์ด dispatch ๋์์ ๋ ๋ง๋ค ์ ๋ฌํ ํจ์๊ฐ ํธ์ถ๋๋ค
react-redux
๋ผ๋ library์์ ์ ๊ณตํ๋connect
ํจ์ ๋๋useSelector
Hook์ ์ฌ์ฉํ์ฌ redux store์ ์ํ์ subscribe ํ๋ค
4. Three Principles
Redux๋ฅผ ์ฌ์ฉํ ๋ 3๊ฐ์ง fundamental principles๋ฅผ ์ง์ผ์ผํ๋ค
4-1. Single source of truth
ํ๋์ application์๋ ๋จ ํ๊ฐ์ store๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ๋ค
์ฌ๋ฌ๊ฐ์ store๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅ์ ํ์ง๋ง ๊ถ์ฅ๋์ง ์๋๋ค!
4-2. State is read-only
React์์ state๋ฅผ update ํด์ผ ํ ๋,
setState
๋ฅผ ์ฌ์ฉํ๊ณ , array๋ฅผ update ํด์ผ ํ ๋๋ array ์์ฒด์ pushํ์ง ์๊ณconcat
๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์กด array๋ ์์ ํ์ง ์๊ณ ์๋ก์ด array๋ฅผ ๋ง๋ค์ด์ ๊ต์ฒดํ๋ ๋ฐฉ์์ผ๋ก updateํ๋คRedux์์๋ ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๊ธฐ์กด์ state๋ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ก์ด state๋ฅผ ์์ฑํ์ฌ updateํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ํด์ฃผ๋ฉด,
๋์ค์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํตํด์ ๋ค๋ก ๋๋ฆด ์๋ ์๊ณ , ๋ค์ ์์ผ๋ก ๋๋ฆด ์๋ ์๋ค
Redux์์ immutability๋ฅผ ์ ์งํด์ผ ํ๋ ์ด์ ๋ ๋ด๋ถ์ ์ผ๋ก data๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๊ฐ์งํ๊ธฐ ์ํ์ฌ shallow equality ๊ฒ์ฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค
์ด๊ฒ์ ํตํด ๊ฐ์ฒด์ ๋ณํ๋ฅผ ๊ฐ์ง ํ ๋ ๊ฐ์ฒด์ ๊น์ํ ์์ชฝ๊น์ง ๋น๊ต๋ฅผ ํ๋ ๊ฒ์ด ์๋๋ผ ๊ฒํฅ๊ธฐ ์์ผ๋ก ๋น๊ต๋ฅผ ํ์ฌ ์ข์ ์ฑ๋ฅ์ ์ ์งํ ์ ์๋ค
4-3. Changes are made with pure functions
์๋์ 3๊ฐ์ง ์ฌํญ์ ์ฃผ์ํ์ฌ
pure function
์ ๋ง๋ค์ผ ํ๋คReducer ํจ์๋ ์ด์ ์ํ์ action ๊ฐ์ฒด๋ฅผ parameter๋ก ๋ฐ๋๋ค
์ด์ ์ ์ํ๋ ์ ๋๋ก ๊ฑด๋ค์ด์ง ์๊ณ , ๋ณํ๋ฅผ ์ผ์ผํจ ์๋ก์ด ์ํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ returnํ๋ค
๋๊ฐ์ parameter๋ก ํธ์ถ๋ reducer ํจ์๋ ์ธ์ ๋ ๋๊ฐ์ ๊ฒฐ๊ณผ๊ฐ์ returnํด์ผ ํ๋ค
Last updated