๋ฆฌ๋์ค๋ ์ด๋ ต๋ค...
Redux?
์ปดํฌ๋ํธ๊ฐ ๋ง์์๋ก ๋ณต์กํด์ง๋ ์ํ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
why?
๊ตฌ์กฐ๊ฐ ์ ์ ๋ณต์กํด์ง๋ฉด์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ถํฐ ์ตํ์ ์ปดํฌ๋ํธ๊น์ง ๋ด๋ ค์ค๋ฉด์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋๋ฌด ๋นํจ์จ์ !
๋ฆฌ๋์ค๋ก ๋ฐ๊นฅ์์ ์ํ๊ด๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด์ ํจ์จ์ ์ผ๋ก ์ ๊ทผ!
์ดํด๊ฐ ๋์ง ์๋๋ค๋ฉด ์๋์ ๊ฐ์ ์ํฉ์ ๋ณด์!
๐
์์ ์ปดํฌ๋ํธ ๊ตฌ์กฐ๊ฐ ์๋์ ์ปดํฌ๋ํธ๊ตฌ์กฐ์ ๊ฐ์ด ๋ณต์กํด์ก๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ด๋ด ๊ฒฝ์ฐ, ์ตํ์ ์์ ์ปดํฌ๋ํธ๊น์ง ์ํ๋ฅผ ์ ๋ฌํด์ฃผ๊ฑฐ๋ ์์ ์ปดํฌ๋ํธ์์ ๋ฐ์ํ ์ด๋ฒคํธ์ ์ํด์ ๋ค๋ฅธ ๋ฃจํธ์ ์๋ ์ปดํฌ๋ํธ์ ์ํ๋ณํ๋ฅผ ๋ถ๋ฌ์ผ์ผ์ผ์ผํ๋ ์ํ์ผ ๊ฒฝ์ฐ์ผ ๋ ๋นํจ์จ์ ์ผ๋ก ์๋ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
How?
์์ ์ ๊ฐ ๋ฌธ์ ๋ก ์ ์ํ๋ ์ํฉ๋ค์ ๋ฆฌ๋์ค๋ ๋ฐ๊นฅ์์ ์ํ๊ด๋ฆฌ๋ฅผ ํ ์ ์๋๋ก ๋์์ค
๋ฆฌ๋์ค๋ ์คํ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ์ปดํฌ๋ํธ ๊ตฌ์กฐ ๋ฐ๊นฅ์ ๋๊ณ ์คํ ์ด๋ผ๋ ์ค๊ฐ์๋ฅผ ํตํด ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๊ฑฐ๋, ์๋ก์ด ์ํ๋ฅผ ์ ๋ฌ๋ฐ์ผ๋ฉฐ ์ด๋ฃจ์ด์ง๋ค.
About Redux?
๊ทธ๋ ๋ค๋ฉด ์ด์ ๋ฆฌ๋์ค๊ฐ ๋ฌด์์ด๊ณ ์ ์ฐ๋์ง ๋๋ต์ ์ธ ์ดํด๊ฐ ๋์๊ฒ์ด๋ค.
๋ค์ ๋ฆฌ๋์ค์ ๋ํด์ ์ข ๋ ๊น์ด ์ดํดํด๋ณด๋๋ก ํ์!
์๋ ํ๋ก ํธ์๋ ์ํ๊ณ์ MVC ํจํด์ด ๋์ธ์๋ค๊ณ ํ๋ค.
๋ค๋ค ๊ฐ๋ฐ๊ณต๋ถ๋ฅผ ํ๋ฉด์ MVCํจํด์ ๋ํด์ ๋ง์ด ๋ค์ด๋ดค์๊ฑฐ๋ผ๊ณ ์๊ฐ๋๋ค.
MVC ํจํด์ ์์ ๊ตฌ์กฐ๋์ฒ๋ผ ๋ฐ์ดํฐ์ ์๋ฐฉํฅ์ ํ๋ฆ์ ๊ฐ์ง๊ณ ์๋ค.
ํ์ง๋ง, ์ด๋ฌํ ํ๋ฆ์ ๋ฐ์ดํฐ์ ๋ณํ๊ฐ ๊ฐํด์ก์ ๋ ๋ณํ๊ฐ ์์ชฝ์ผ๋ก ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ์คํ๋ ค ๋ณต์กํจ์ ๋ถ๋ฌ์จ๋ค.
์ด ์ ์ ๋ณด์ํด์ ๋์จ ๊ฒ์ด ๋ฐ๋ก Flux!
Flux๋ ๋ฐ์ดํฐ๊ฐ ๋จ๋ฐฉํฅ์ผ๋ก ํ๋ฌ๊ฐ๋ ํ๋ฆ์ ๊ฐ์ง๊ณ ์๋ค. ์ผ์ ์ฅ์์์๋ง ๋ฐ์ดํฐ๋ฅผ ๋ณํ์ํฌ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋ํ์ ์ ๋ ์ฉ์ดํ๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๊ณ , ๋ฆฌ์กํธ์์ ์ด๋ฐ ํจํด์ ์งํฅํ๊ณ ์๋ค.
Redux๋ Flux๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ ์ฒด์ ์ธ ํจํด์ ๋์ผํ๋ค.
์ํ๊ฐ์ Store์์ ๊ด๋ฆฌ๋๊ณ , Reducer๋ฅผ ํตํด์๋ง ์๋ก์ด ์ํ๋ฅผ ๋ฐ์ ์ ์๋ ๊ตฌ์กฐ์ด๋ค.
Redux๋ฅผ ์ฌ์ฉํ ๋ 3๊ฐ์ง ๊ท์น
- ๋จ์ผ ์คํ ์ด ์ฌ์ฉ
ํ๋์ ์ดํ๋ฆฌ์ผ์ด์ ์์๋ ํ๋์ ์คํ ์ด๋ง ๊ฐ๋ฅ!
์ฑ์ ๋ชจ๋ ์ํ๋ ํ ์ฅ์(store)์ ์ ์ฅ - ์ํ๋ ๋ฌด์กฐ๊ฑด ์ฝ๊ธฐ ์ ์ฉ
๋ถ๋ณ์ฑ์ ์ง๋ฅผ ์ํด์ ์ก์ ์ ํตํด์๋ง ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๋ค. - ๋ฆฌ๋์๋ ์์ํ ํจ์์ด์ด์ผํจ
๋์ผํ ์ ๋ ฅ์ ๋ฐ์์ ๋ ์ธ์ ๋ ๋์ผํ ์ถ๋ ฅ์ ๋ด๋ ํจ์
Math.random()์ด๋ ๋คํธ์ํฌ์ ์์ฒญ์ ํ๋ ์์ ๊ณผ ๊ฐ์ ํจ์ ์ฌ์ฉX
๋ฆฌ๋์ค ๊ฐ๋
Action ์ก์
์ํ์ ์ด๋ ํ ๋ณํ๊ฐ ํ์ํ๋ฉด ์ก์ ๋ฐ์!
ํ๋์ ๊ฐ์ฒด๋ก ํํ
์ก์ ๊ฐ์ฒด๋ ๋ฐ๋์ typeํ๋๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผํ๋ค.
{
type: "ADD_TODO",
data: {
id: 0,
text: "redux"
}
}
์ก์ ์์ฑํจ์
์ก์ ์์ฑํจ์๋ ์ก์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฃผ๋ ํจ์
function addTodo(data) {
return {
type: "ADD_TODO",
data
};
}
//ํ์ดํํจ์
const changeInput = text => ({
type: 'CHANGE_INPUT',
text
});
๋ณํ๊ฐ ์ผ์ด๋ ๋๋ง๋ค ์ก์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ๋๋ฐ ๋งค๋ฒ ์ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๋ฒ๊ฑฐ๋กญ๊ธฐ ๋๋ฌธ์ ํจ์๋ก ๋ง๋ค์ด์ ๊ด๋ฆฌํ๋ค.
Reducer ๋ฆฌ๋์
๋ฆฌ๋์๋ ๋ณํ๋ฅผ ์ผ์ผํค๋ ํจ์
์ก์ ๋ง๋ค๊ธฐ -> ๋ณํ -> ์ก์ ๋ฐ์ -> ๋ฆฌ๋์๊ฐ ํ์ฌ์ํ์ ์ ๋ฌ๋ฐ์ ์ก์ ๊ฐ์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ -> ๋๊ฐ์ ์ฐธ๊ณ ํด์ ์๋ก์ด ์ํ๋ฅผ ๋ฐํ
function reducer(state, action) {
...
return alteredState;
}
Store ์คํ ์ด
ํ๋ก์ ํธ์ ๋ฆฌ๋์ค๋ฅผ ์ ์ฉํ๊ธฐ ์ํด์ ์คํ ์ด๋ฅผ ๋ง๋ ๋ค.
1ํ๋ก์ ํธ 1์คํ ์ด
์คํ ์ด ์์ ํ์ฌ ์ฑ ์ํ์ ๋ฆฌ๋์๊ฐ ๋ค์ด์๊ณ , ๊ทธ๋ฆฌ๊ณ ๋ช๊ฐ์ง์ ๋ด์ฅํจ์๋ฅผ ํฌํจํ๊ณ ์๋ค.
Subscribe ๊ตฌ๋
์คํ ์ด์ ๋ด์ฅํจ์ ์ค ํ๋
๊ตฌ๋ ํจ์์์ ๋ฆฌ์คํฐ ํจ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ ํธ์ถ -> ํจ์๊ฐ ์ก์ ์ด ๋์คํ์น๋ผ์ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ํธ์ถ๋จ
const listener = () => {
console.log('์ํ๊ฐ ์
๋ฐ์ดํธ๋จ');
}
const unsubscribe = store.subscribe(listener);
unsubscribe(); //์ถํ ๊ตฌ๋
์ ๋นํ์ฑํํ ๋ ํจ์ ํธ์ถ
Dispatch ๋์คํจ์น
๋์คํจ์น๋ ์คํ ์ด์ ๋ด์ฅ ํจ์ ์ค ํ๋์ด๋ค.
์ก์ ์ ๋ฐ์์ํค๋ ๊ฒ!
๋์คํจ์น๊ฐ ์ก์ ์ ๋ฐ์์์ผ ์คํ ์ด์๊ฒ ์ํ๋ณํ๊ฐ ํ์ํ๋ค๊ณ ์๋ฆผ
๋์คํจ์น๊ฐ ํธ์ถ๋๋ฉด ์คํ ์ด๋ ๋ฆฌ๋์ ํจ์๋ฅผ ์คํ์์ผ์ ์๋ก์ด ์ํ๋ฅผ ๋ง๋ค์ด ์ค๋ค.
์ฐธ๊ณ
๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ์
https://velog.io/@j35148/Redux-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
https://velog.io/@youthfulhps/What-is-Redux-and-why-use-it
'WEB > REACT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
react-query๋ฅผ ์งง๊ฒ ์ฌ์ฉํด๋ณธ ํ๊ณ ..๋๊น...? (0) | 2023.04.04 |
---|---|
๋ฆฌ์กํธ์์ setState๋ฅผ ํตํด์ state๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋ ์ด์ / setState์ ๋น๋๊ธฐ์ฑ (0) | 2022.10.21 |
[React] useEffect (0) | 2021.07.06 |
[React] LifeCycle (๋ผ์ดํ์ฌ์ดํด, ์๋ช ์ฃผ๊ธฐ) (0) | 2021.07.05 |
[React] Rerendering(๋ฆฌ๋ ๋๋ง) (0) | 2021.06.24 |