๐ฆRedux๋ ๋ฌด์์ธ๊ฐ?
Source: Dev.to
ํ๋ก ํธ์๋ ๊ฐ๋ฐ, ํนํ React๋ฅผ ๋ฐฐ์ฐ๊ณ ์๋ค๋ฉด Redux์ ๋ํด ๋ค์ด๋ดค์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ฒ์์ ํท๊ฐ๋ฆด ์ ์์ง๋ง, ํต์ฌ ์์ด๋์ด๋ ๊ฐ๋จํฉ๋๋ค.
Redux๋?
Redux๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๋จ์ผ, ์ค์ ์ฅ์๋ฅผ ์ ๊ณตํ๋ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ด๋ฅผ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ์ฝ๊ณ ์ธ ์ ์๋ ํฐ ์ ์ฅ ์์๋ผ๊ณ ์๊ฐํ๋ฉด, ๋ฐ๋ณต์ ์ธ propโdrilling์ ์์จ ์ ์์ต๋๋ค.
ํต์ฌ ๊ฐ๋
Store
์คํ ์ด๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ๋ณด๊ดํฉ๋๋ค.
// Example state
{
count: 0
}
์คํ ์ด๋ฅผ ์ฐฝ๊ณ , ์ํ ์ฌ๋ฌผํจ, ํน์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ด์์๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ค๋ก ์์ํด ๋ณด์ธ์.
Action
์ก์ ์ ๋ฌด์์ด ์ผ์ด๋์ผ ํ๋์ง๋ฅผ ์ค๋ช ํ๋ ์์ JavaScript ๊ฐ์ฒด์ ๋๋ค.
// Example action
{
type: "INCREMENT"
}
์ก์ ์ ๋ ์คํ ๋์์ ์ฃผ๋ฌธ์ ๋ฃ๊ฑฐ๋, ๋ฒํผ์ ํด๋ฆญํ๊ฑฐ๋, ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ํ์์ ๊ฐ์ต๋๋ค.
Reducer
๋ฆฌ๋์๋ ์ก์ ์ ๋ํ ์๋ต์ผ๋ก ์ํ๊ฐ ์ด๋ป๊ฒ ๋ณํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ์์ ํจ์์ ๋๋ค.
function counterReducer(state = { count: 0 }, action) {
if (action.type === "INCREMENT") {
return { count: state.count + 1 };
}
return state;
}
๋ฆฌ๋์๋ ์ฃผ๋ฌธ(์ก์ )์ ๋ฐ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด ๋ด๋ ์๋ฆฌ์ฌ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
๋ฐ์ดํฐ ํ๋ฆ ์์
๋ฒํผ์ ๋๋ฌ ์นด์ดํฐ๋ฅผ ์ฆ๊ฐ์ํฌ ๋:
- ์ฌ์ฉ์๊ฐ ๋ฒํผ ํด๋ฆญ ๐ฑ๏ธ
- ์ก์
์ด ๋์คํจ์น๋จ ๐ข (
{ type: "INCREMENT" }) - ๋ฆฌ๋์๊ฐ ์ก์ ์ ๋ฐ์ ๐ ์๋ก์ด ์ํ๋ฅผ ๋ฐํ
- ์คํ ์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ ๐ฌ
- UI๊ฐ ์๋์ผ๋ก ๋ค์ ๋ ๋๋ง ๐
์ด ์ผ๋ฐฉํฅ ํ๋ฆ (action โ reducer โ store โ UI) ์ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ด๋ผ๊ณ ํฉ๋๋ค.
Redux ์ฌ์ฉ์ ์ฅ์
- โ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ์ค์์์ ๊ด๋ฆฌ
- โ ๋ง์ ์ปดํฌ๋ํธ์ ๊ฑธ์น prop drilling ๋ฐฉ์ง
- โ ์ํ ๋ณํ๋ฅผ ์์ธก ๊ฐ๋ฅํ๊ณ ์ถ์ ๊ฐ๋ฅํ๊ฒ ์ ์ง
- โ Redux DevTools ๊ฐ์ ๋๊ตฌ๋ก ๋๋ฒ๊น ๊ฐ์ํ
- โ ๊น๋ํ๊ณ ์กฐ์ง์ ์ธ ํ๋ก์ ํธ ๊ตฌ์กฐ ์ ์ง
Redux๋ฅผ ์ฌ์ฉํด์ผ ํ ๋
Redux๊ฐ ๋น์ ๋ฐํ๋ ๊ฒฝ์ฐ:
- ๋ง์ ์ปดํฌ๋ํธ๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๊ท๋ชจ๊ฐ ํฐ ์ฑ
- ์ํ ๋ก์ง์ด ๋ณต์กํ๊ฑฐ๋ ์ํธ์์ฉ์ด ๋ง์ ๊ฒฝ์ฐ
- ์ํ ๋ณํ๋ฅผ ์ ๋ขฐ์ฑ ์๊ฒ ์ถ์ ยท๋๋ฒ๊น ํด์ผ ํ ๋
์์ฃผ ์์ ์ฑ์์๋ Redux๊ฐ ๋ถํ์ํ ์ค๋ฒํค๋๊ฐ ๋ ์ ์์ต๋๋ค.
Redux Toolkit
Redux Toolkit์ Redux ๋ก์ง์ ์์ฑํ๋ ํ๋์ ์ด๊ณ ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ ๋๋ค. Toolkit์ Redux๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ค์ด ์ค๋๋ค:
- ์ค์ ์ด ๋ ์ฌ์ ๐
- ์ฝ๋๊ฐ ๋ ๊น๋ํ๊ณ ๊ฐ๊ฒฐํจ โจ
- ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋ ๊ฐ์ ๐งน
Toolkit์ ์ฌ์ฉํ๋ฉด ์ฌ๋ผ์ด์ค, ๋ฆฌ๋์, ๋น๋๊ธฐ thunk ๋ฑ์ ํจ์ฌ ์ ์ ์ฝ๋ ๋ผ์ธ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
์์ฝ
- ๐ง Store = ์ค์ ๋ฐ์ดํฐ ์ปจํ ์ด๋
- ๐ข Action = ๋ฌด์์ด ์ผ์ด๋์ผ ํ๋์ง์ ๋ํ ์ค๋ช
- ๐ Reducer = ์๋ก์ด ์ํ๋ฅผ ๋ง๋ค์ด ๋ด๋ ๋ก์ง
- ๐ฌ Redux = ๋ชจ๋ ๊ฒ์ ์ฐ๊ฒฐํด ์ฃผ๋ ์ ์ฒด ๊ด๋ฆฌ ์์คํ
์นด์ดํฐ๋ todo ์ฑ ๊ฐ์ ์์ ์์ ๋ก ์์ํด ํ๋ฆ์ ์ฐ์ตํ๋ฉด, ๊ธ๋ฐฉ Redux์ ์ต์ํด์ง ์ ์์ต๋๋ค. ํ๋ก์ ํธ๋ฅผ ๊ณ์ ๋ง๋ค๋ฉด์ ๊ฒฝํ์ ์๋ค ๋ณด๋ฉด Redux๊ฐ React ํดํท์ ์์ฐ์ค๋ฌ์ด ์ผ๋ถ๊ฐ ๋ ๊ฒ์ ๋๋ค. ๐