๋ด๊ฐ ๋ฆฌ๋์ค๋ฅผ ๊ณต๋ถํ๋ ์ด์
์ฒ์ ๋ฆฌ์กํธ ๊ณต๋ถ๋ฅผ ํ ๋ ๋ฆฌ์กํธ๋ฅผ ๋ฐฐ์ฐ๊ณ ๋์ ๋ฆฌ๋์ค๋ฅผ ๋ฐฐ์ฐ๋ ๊ณผ์ ์ด์๋๋ฐ ๋ฆฌ์กํธ๋ฅผ ๋ฐฐ์ฐ๊ณ ๋ฆฌ์กํธ ๋ง์ผ๋ก ์ด๋ฃจ์ด์ง ํ๋ก์ ํธ๋ฅผ ๋ง๋ ์ดํ์ ๋ฆฌ๋์ค ๊ณต๋ถ๋ฅผ ํด์ผ์ง ๋ผ๊ณ ์๊ฐํ์๋๋ฐ, ๊ทธ ๋๋ ๋ฆฌ๋์ค๊ฐ ๋ฌด์์ธ์ง, ๊ฐ๋ฐ์์ ์ด๋ค ์ญํ ์ ํ๋์ง ์ ํ ๋ชจ๋ฅด๋ ์ํ์๋ค.
๋ฆฌ์กํธ ๊ณต๋ถ๋ฅผ ํ๋ค๋ณด๋ ํ์ ์ปดํฌ๋ํธ์๊ฒ State๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด ๋ฌด์ฒ์ด๋ ๊ท์ฐฎ์ ์ผ์ด๋ผ๊ณ ์๊ฐํ์๋๋ฐ ์ด๋ฅผ ํด๊ฒฐํ ๋งํ ๋๊ตฌ๊ฐ ์๋ ์ฐพ์๋ดค๋๋ ๋ฆฌ๋์ค์๊ณ ์ด์ ๋ฆฌ๋์ค๋ฅผ ๋ฐฐ์๋ณด๋ ค ํ๋ค ๐
๐ ๋ฆฌ๋์ค ์๊ฐ
๋ฆฌ๋์ค๋ ๊ฐ์ฅ ์ฌ์ฉ๋ฅ ์ด ๋์ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
์๊ท๋ชจ ํ๋ก์ ํธ์์๋ ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ง state๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ง์ผ๋ก ์ถฉ๋ถํ์ง๋ง, ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ํ ๊ด๋ฆฌ๊ฐ ๊ต์ฅํ ๋ฒ๊ฑฐ๋ก์์ง ์ ์๋ค.
๋ฆฌ์กํธ์์ ๋ฆฌ๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด, ์ํ ์ ๋ฐ์ดํธ์ ๊ดํ ๋ก์ง์ ๋ชจ๋๋ก ๋ฐ๋ก ๋ถ๋ฆฌํ์ฌ ์ปดํฌ๋ํธ ํ์ผ๊ณผ ๋ณ๊ฐ๋ก ๊ด๋ฆฌํ ์ ์์ผ๋ฏ๋ก ์ฝ๋๋ฅผ ์ ์ง ๋ณด์ํ๋ ๋ฐ ๋์์ด ๋๋ค. ๋ํ, ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ๋์ผํ ์ํ๋ฅผ ๊ณต์ ํด์ผ ํ ๋ ๋งค์ฐ ์ ์ฉํ๋ฉฐ, ์ค์ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ์ปดํฌ๋ํธ๋ง ๋ฆฌ๋ ๋๋ง ๋๋๋ก ์ฝ๊ฒ ์ต์ ํ๋ ๊ฐ๋ฅํฉ๋๋ค ๊ทธ๋ฆฌ๊ณ ๋ฆฌ๋์ค๋ Vanilla JavaScript์ ์ํ๊ด๋ฆฌ์๋ ๋ฆฌ๋์ค๋ฅผ ์ด์ฉํ ์ ์๋ค.
๐ ๋ฆฌ๋์ค์ ํ๋ฆ
๋ฆฌ๋์ค๋ Action, Action Creator, Reducer, Store, Dispatch๋ก ์ด๋ฃจ์ด์ง ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค
Action
์ํ์ ๋ณํ๊ฐ ํ์ํ ๋, ์ก์ ์ ๋ฐ์ ์ํฌ ์ ์๋ค. ์ก์ ์ ํ๋์ ๊ฐ์ฒด๋ก ํํ๋๋ค ์ด ์ก์ ๊ฐ์ฒด๋ type ํ๋๋ฅผ ๋ฐ๋์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. ์ด type์ ๊ฐ์ ์ก์ ์ ์ด๋ฆ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ธ์ ๊ฐ๋ค์ ๋์ค์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ํ ๋ ์ฐธ๊ณ ํด์ผ ํ ๊ฐ์ด๋ฉฐ, ์์ฑ์ ๋ง์๋๋ก ๋ฃ์ ์ ์๋ค.
{
type: 'ADD_TODO',
data: {
id: 1,
text: '๋ฆฌ๋์ค ์ฐ์ต'
}
}
Action Creator
์ก์ ์์ฑํจ์๋ผ ๋ถ๋ฆฌ๋ Action Creator๋ ์ก์ ์ ๋ง๋๋ ํจ์์ ๋๋ค. ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ ฅ๋ฐ์,
์ก์ ๊ฐ์ฒด ํํ๋ก ๋ง๋ค์ด์ค๋ค.
function addTodo(data) {
return {
type: "ADD_TODO",
data
};
}
์ด๋ค ๋ณํ๋ฅผ ์ผ์ผ์ผ์ผ ํ ๋๋ง๋ค ์ก์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ๋๋ฐ ๋งค๋ฒ ์ก์ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๊ธฐ ๋ฒ๊ฑฐ๋ก์ธ ์ ์๊ณ , ๋ง๋๋ ๊ณผ์ ์์ ์ค์๋ก ์ ๋ณด๋ฅผ ๋์น ์๋ ์๋ค. ์ด๋ฌํ ์ผ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด๋ฅผ ํจ์๋ก ๋ง๋ค์ด์ ๊ด๋ฆฌํ๋ค.
Reducer
๋ฆฌ๋์๋ ๋ณํ๋ฅผ ์ผ์ผํค๋ ํจ์์ด๋ค. ์ก์ ์ ๋ง๋ค์ด์ ๋ฐ์๊ธฐํค๋ฉด ๋ฆฌ๋์๊ฐ ํ์ฌ ์ํ์ ์ ๋ฌ๋ฐ์ ์ก์ ๊ฐ์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์จ๋ค.
const initialState = {
counter: 1
};
function reducer (state = initialState, action) {
switch (action.type) {
case ...
......
}
}
๋ ๊ฐ์ ์ฐธ๊ณ ํ์ฌ ์๋ก์ด ์ํ๋ฅผ ๋ง๋ค์ด ๋ฐํํด ์ค๋ค .
Store
์คํ ์ด๋ ์ปดํฌ๋ํธ ์ธ๋ถ์ ์๋ ์ํ ์ ์ฅ์๋ค. ์คํ ์ด ์์๋ ํ์ฌ ์ํ๋ค, ๋ฆฌ๋์, ๊ทธ๋ฆฌ๊ณ ๋ช ๊ฐ์ง์ ๋ด์ฅ ํจ์๋ฅผ ํฌํจํ๊ณ ์๋ค.
Dispatch
๋์คํจ์น๋ ์ก์ ์ ๋ฐ์์ํค๋ ์ญํ ์ ํ๋ค. ๋์คํจ์น๊ฐ ์ก์ ์ ๋ฐ์์ํค๋ฉด ๋ฆฌ๋์์์ ์ก์ ์ ๋ง๋ ๋ก์ง์ผ๋ก ์๋ก์ด ์ํ๋ฅผ ๋ง๋ค์ด ๋ฐํํด ์ค๋ค.
๐ ๋ฆฌ๋์ค์ ์ธ ๊ฐ์ง ๊ท์น
๋จ์ผ ์คํ ์ด ์ฌ์ฉ์ ๊ถ์ฅํ๋ค
ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ํ๋์ ์คํ ์ด๋ง ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๋ค ์ฌ๋ฌ๊ฐ์ ์คํ ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅ ํ์ง๋ ์์ง๋ง ์ํ ๊ด๋ฆฌ๊ฐ ๋ณต์กํด์ง ์ ์๋ค.
์ํ๋ ์ฝ๊ธฐ ์ ์ฉ
๋ฆฌ๋์ค์ ์ํ๋ ์ฝ๊ธฐ ์ ์ฉ์ด์ฌ์ผ ํ๋ค. ๋ฆฌ์กํธ์์ state๋ฅผ ์ ๋ฐ์ดํธํ ๋ ๋ถ๋ณ์ฑ์ ์งํค๊ธฐ ์ํด spread ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฏ ๋ฆฌ๋์ค์์๋ ๊ธฐ์กด์ ๊ฐ์ฒด๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด ์ฃผ์ด์ผ ํ๋ค.
๋ฆฌ๋์ค์์ ๋ถ๋ณ์ฑ์ ์ ์งํด์ผ ํ๋ ์ด์ ๋ ๋ด๋ถ์กฑ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๊ฐ์งํ๊ธฐ ์ํด shallow equality ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฆฌ๋์๋ ์์ํ ํจ์
๋ฆฌ๋์๋ ์์ํ ํจ์์ด์ด์ผ ํ๋ฏ๋ก ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค .
- ๋ฆฌ๋์ ํจ์๋ ์ด์ ์ํ์ ์ก์ ๊ฐ์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ค.
- ํ๋ผ๋ฏธํฐ ์ธ์ ๊ฐ์๋ ์์กดํ๋ฉด ์ ๋๋ค.
- ์ด์ ์ํ๋ ์ ๋๋ก ๊ฑด๋๋ฆฌ์ง ์๊ณ , ๋ณํ๋ฅผ ์ค ์๋ก์ด ์ํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ๋ฐํํ๋ค.
- ๋๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ํธ์ถ๋ ๋ฆฌ๋์ ํจ์๋ ์ธ์ ๋ ๋๊ฐ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค.
๋คํธ์ํฌ ์์ฒญ์ ํ๋ ์์ ์ ์์ํ์ง ๋ชปํ ์์ ์ด๋ฏ๋ก ๋คํธ์ํฌ ์์ฒญ๊ณผ ๊ฐ์ ๋น๋๊ธฐ ์์ ์ ๋ฏธ๋ค์จ์ด๋ฅผ ํตํด
๊ด๋ฆฌํ๋ค.
๐ ๋ง๋ฌด๋ฆฌ
์ด ๊ธ์์ ๋ฆฌ์กํธ์ ์ํ๊ด๋ฆฌ๋ฅผ ๋์์ฃผ๋ ๋ฆฌ๋์ค๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์๋ํ๋์ง ์์๋ณด์๋ค
๋ค์ ๊ธ์์๋ ๋ฆฌ๋์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ํ๊ฒฝ ์ค์ ๊ณผ ์ค์ ๋ก ๋ฆฌ๋์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ์ฌ ์์๋ณด๋๋ก ํ์ !
'Redux' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Redux-Toolkit ์์ Saga ์ฌ์ฉํ๊ธฐ (Feat. Typescript) (0) | 2021.08.01 |
---|---|
Redux Toolkit ์ ๋ํ์ฌ ์์๋ณด๊ธฐ (0) | 2021.06.07 |
๋ฆฌ๋์ค์์ Hooks ์ฌ์ฉํ๊ธฐ (0) | 2021.05.25 |
๋ฆฌ๋์ค ์์ ํ๊ฒฝ ์ค์ ๋ฐ ์ฌ์ฉ๋ฐฉ๋ฒ (1) | 2021.05.24 |