๐ค ๋ฆฌ๋์ค๋ ๋ชฐ๊น..? ๊ทธ๋ฆฌ๊ณ ์ ์ฌ์ฉํ๋ ๊ฑธ๊น?
ํ๋ก์ ํธ์ depth ๊ฐ ๊น์ด์ง๋ฉด์ ์ปดํฌ๋ํธ๊ฐ์ state๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ๋๋๋๋ ๊ฒ์ด ์ ์ ๋ณต์กํด์ง๋ค..
์ด๋ฅผ ํด๊ฒฐ ํ๊ธฐ ์ํด ์ต์์ ์ปดํฌ๋ํธ์์ ์ ์ญ๋ณ์๋ก ํ๊บผ๋ฒ์ ์ ์ธํด์ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
๋ฆฌ๋์ค๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด, state๋ก ์ผ์ผํ ์ ์ธํ์ง ์์๋ ๋๋ค!
๐ ๋ฆฌ๋์ค์ ์ฅ์
- action์ ์คํํ ๋ dispatch ์ ํ์คํ ๋ฆฌ๋ฅผ ํ์ธํ ์ ์๋ค.(์๋ฌ ํธ๋ค๋ง์ ์ฉ์ด)
- git reset ์ฒ๋ผ ์ด์ action์ผ๋ก ๋๋๋ฆด ์ ์๋ค.
(๋จ, state๊ฐ ๋ถ๋ณ์ฑ์ ์ ์งํ๋ค๋ ์ ์ ๊ฐ ์์ด์ผ ํจ)
๐ป๋จ์ ์ ๋ญ๊ฐ ์์๊น?
- action๋ค์ด ๋ฏธ๋ฆฌ ์ ์๊ฐ ๋์ด์์ด์ผ ํ๋ค.
- ๋ถ๋ณ์ฑ์ด ์ ์ง๋์ด์ผ ํ๋ state์ ํน์ฑ๋๋ฌธ์ ๊ฐ์ฒด๋ฅผ ๋งค๋ฒ ์๋ก ๋ง๋ค์ด์ค์ผ ํ๋ค.
๐ ๋ฆฌ๋์(reducer)..? ๊ทธ๊ฑด ๋ ๋ญ๋ฐ?
๋ฆฌ๋์ค์ ๋จ์ ์ ๋ณด์, ๋ถ๋ณ์ฑ์ ์์ฑ์ ์ ์งํ๊ธฐ ์ํด ๋์จ ๊ฐ๋ ์ด๋ค.
action์ด ์คํ๋ ํ, ์๋ก์ด ๊ฐ์ฒด(object)๋ฅผ ๋ง๋๋ ์ญํ ์ด๋ฉฐ, ๊ธฐ์กด์ ์ ์ฅ๋ state๊ฐ ์๋ก์ด ๊ฐ์ฒด๋ก ๋์ฒด๋๋ค.
- state์ action์ ์ธ์๋ก ๊ฐ์ง๊ณ , next_state ๊ฐ์ ๋ฆฌํดํ๋ ํจ์
(* ์ฆ, state์ action์ ์ฐ๊ฒฐํ๋ ์ญํ ์ ์ํํ๋ค.)
๐ dispatch์ reducer ์ฌ์ด์ ์์ : middleware
[Example]
(1) ์คํ ์ด ์์ฑํ๊ธฐ - createStore
const { createStore } = require('redux');
//๋ฆฌ๋์๋ ํจ์
const reducer = () => {};
//์ด๊ธฐ๊ฐ
const initialState = {
id: 1,
name: 'John',
age: 20,
is_admin: null,
};
//์คํ ์ด ์์ฑ createStore(๋ฆฌ๋์, ์ด๊ธฐ๊ฐ, ...)
const store = createStore(reducer, initialState);
//์ฝ์๋ก ์ฐ์ด๋ณด๊ธฐ
console.log(store.getState());
(2) action ์ ์ํ๊ธฐ
//action ~ objectํ
//์ก์
์ ์ถ์์ ์ผ๋ก ๋ง๋ค์ด์ผ ํ๋ค. (ํ์ฅ์ด ๊ฐ๋ฅํ๋๋ก ๊ตฌํํ๋ ๊ฒ์ด ํต์ฌ)
const '์ก์
์ ์' = {
type: '์ก์
์ด๋ฆ',
data: '๋ฐ๊พธ๋ ๋ฐ์ดํฐ ๊ฐ',
payload,
error,
result,
}
//๋์ ์ผ๋ก ์ก์
์ ๋ฐ๊พธ๊ธฐ ์ํด ํจ์ํ์ผ๋ก ๋ง๋ ๋ชจ์ต - ์ฌ์ฌ์ฉ์ฑ
const changeAction = (data) => {
return { //action - ์ก์
์ object๋ค.
type: 'CAHNGE_A',
data,
}
}
(3) dispatch ์ ์ฉ
//(1) action ์์ฑ ํจ์ ์ฌ์ฉํ ๊ฒฝ์ฐ
store.dispatch(changeAdminAccess('Jully'));
//(2) ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ
store.dispatch({
type: 'CHANGE_USER_NAME',
data: 'Jully',
});
(4) reducer ๋ง๋ค๊ธฐ
const reducer = (prevState, action) => {
//action ์ ๋ฐ์์ ์๋ก์ด state๋ฅผ ๋ง๋ค์ด์ค๋ค.
//action ์ด ๋ง์์ง๋ฉด case๋ค์ด ์ ์ ๋์ด๋จ
switch (action.type) {
case 'CHANGE_USER_NAME':
return {
id: 1,
name: action.data,
age: 20,
is_admin: null,
};
case 'CHANGE_USER_AGE':
return {
id: 1,
name: 'John',
age: action.data,
is_admin: null,
};
}
};
'Frontend > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
pnpm cache clean (0) | 2023.03.02 |
---|---|
Typescript - useRef() ์ฌ์ฉ์ type ์ค์ (0) | 2022.12.13 |
[React] + [Typescript + Emotion]์์ props ๋๊ธฐ๋ ๋ฐฉ๋ฒ (0) | 2022.09.10 |
[Redux]๋ฏธ๋ค์จ์ด(middleware) (0) | 2022.08.14 |
[Redux] ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(SoC) (0) | 2022.08.14 |