Jieunny์ ๋ธ๋ก๊ทธ
[React] ๋ฆฌ๋์ค๋ ๋ฌด์์ผ๊น? ๋ณธ๋ฌธ
๐ก ๋ฆฌ๋์ค๋?
โฐ ์ํ ๊ด๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ํ๊ฒ ๋์์ฃผ๋ ์คํ์์ค JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โฐ Store๋ผ๋ ๊ณณ์ ์ํ๋ฅผ ์ ์ฅํ๋ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โ ๋ฆฌ๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์
โฐ ๋ฆฌ์กํธ์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋จ๋ฐฉํฅ์ด๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ์์ ์์์ผ๋ก ์ ๋ฌํด์ฃผ๋ ์์ผ๋ก ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค.
โฐ ๋ถ๋ชจ์ ์์ ์ปดํฌ๋ํธ์ ๊น์ด๊ฐ ์งง๋ค๋ฉด ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง, ๊ธธ๋ค๋ฉด props drilling์ด ๋ฐ์ํ๋ค.
โฐ Props Drilling - props๋ฅผ ํ์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ๊ธฐ ์ํด ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ๊ฑฐ์ณ์ผ ํ๋๋ฐ, ๊ทธ ๋ฐ์ดํฐ๊ฐ ํ์ํ์ง ์์ ์ปดํฌ๋ํธ์๊น์ง props๋ฅผ ์ ๋ฌํ๊ฒ ๋๋ ํ์
โ๏ธ ๋ฆฌ๋์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์์์ผ ํ ๊ฐ๋
1. Action
โฐ ์ํ๊ฐ์ด ์ด๋ป๊ฒ ๋ณํํ ์ง ํ๋์ ์ ์ด๋์ ๊ฐ์ฒด
โฐ ์ก์ ๊ฐ์ฒด๋ type ํ๋๋ฅผ ํ์์ ์ผ๋ก ๊ฐ์ง๊ณ ์์ด์ผํ๊ณ ๊ทธ ์ธ์ ๊ฐ๋ค์ ๊ฐ๋ฐ์ ๋ง์๋๋ก ๋ฃ์ด์ค ์ ์๋ค.
{
type: "TOGGLE_VALUE"
}
2. Action Creator
โฐ ์ก์ ์ ๋ง๋๋ ํจ์๋ก, ๋จ์ํ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์์ ์ก์ ๊ฐ์ฒด ํํ๋ก ๋ง๋ค์ด์ค๋ค.
export function addTodo(data) {
return {
type: "ADD_TODO",
data
};
}
// ํ์ดํ ํจ์๋ก๋ ๋ง๋ค ์ ์์ต๋๋ค.
export const changeInput = text => ({
type: "CHANGE_INPUT",
text
});
3. Dispatch
โฐ ์ํ๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ์คํํ๋ ํจ์
โฐ ์ก์ ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๋ค. ๊ทธ๋ ๊ฒ ํธ์ถ์ ํ๋ฉด, ์คํ ์ด๋ ๋ฆฌ๋์ ํจ์๋ฅผ ์คํ์์ผ์ ํด๋น ์ก์ ์ ์ฒ๋ฆฌํ๋ ๋ก์ง์ด ์๋ค๋ฉด ์ก์ ์ ์ฐธ๊ณ ํ์ฌ ์๋ก์ด ์ํ๋ฅผ ๋ง๋ค์ด์ค๋ค.
//๋ด๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ธ ์ก์
๊ณผ ๊ทธ ์ก์
์ ๋ฆฌ๋์๋ก ๋ณด๋ด์ค ๋์คํจ์น
store.dispatch({ type: 'ADD_TODO' })
store.dispatch({ type: 'CHANGE_INPUT' })
4. Reducer
โฐ ์ก์ ์ ํ์ ์ ๋ฐ๋ผ ๋ณํ๋ฅผ ์ผ์ผํค๋ ํจ์
โฐ ํ์ฌ์ ์ํ์, ์ ๋ฌ ๋ฐ์ ์ก์ ์ ์ฐธ๊ณ ํ์ฌ ์๋ก์ด ์ํ๋ฅผ ๋ง๋ค์ด์ ๋ฐํํ๋ค.
function reducer(state, action) {
// ์ํ ์
๋ฐ์ดํธ ๋ก์ง
return alteredState;
}
5. Store
โฐ ์ํ๊ฐ์ ์ ์ฅํ๋ ๊ณต๊ฐ
โฐ ์คํ ์ด ์์๋ ํ์ฌ์ ์ฑ ์ํ์ ๋ฆฌ๋์๊ฐ ๋ค์ด๊ฐ์๊ณ , ์ถ๊ฐ์ ์ผ๋ก ๋ช๊ฐ์ง ๋ด์ฅ ํจ์๋ค์ด ์๋ค.
import { createStore } from 'redux';
//์ํ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ์ธ ์คํ ์ด
let store = createStore(reducer)
//์ํ ๋ณํ๋ฅผ ๊ฐ์งํ๋ ์๋ธ์คํฌ๋ผ์ด๋ธ
// ๊ตฌ๋
๋ํ ์คํ ์ด์ ๋ด์ฅํจ์ ์ค ํ๋
// ํจ์ ํํ์ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์จ๋ค.
// subscribe ํจ์์ ํน์ ํจ์๋ฅผ ์ ๋ฌํด์ฃผ๋ฉด, ์ก์
์ด ๋์คํจ์น ๋์์ ๋ ๋ง๋ค ์ ๋ฌํด์ค ํจ์๊ฐ ํธ์ถ๋๋ค.
store.subscribe(() => console.log(store.getState())))
โ๏ธ ๋ฆฌ์กํธ์์๋ subscribe๋ฅผ ์ฌ์ฉํ์ง ์๊ณ useSelector Hook ์ ์ฌ์ฉํ์ฌ ๋ฆฌ๋์ค ์คํ ์ด์ ์ํ์ ๊ตฌ๋ ํ๋ค.
๐ ๋ฆฌ๋์ค์ ๊ท์น
1. ๋จ์ผ ์คํ ์ด ์ฌ์ฉ์ ๊ถ์ฅํ๋ค.
โฐ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ํ๋์ ์คํ ์ด๋ฅผ ์ฌ์ฉํ๋ค.
2. ์ํ๋ ์ฝ๊ธฐ ์ ์ฉ์ด์ด์ผ ํ๋ค.
โฐ ๊ธฐ์กด์ ์ํ๋ ๊ฑด๋ค์ด์ง ์๊ณ ์๋ก์ด ์ํ๋ฅผ ์์ฑํ์ฌ ์ ๋ฐ์ดํธ ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ํด์ฃผ๋ฉด, ๋์ค์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํตํด์ ๋ค๋ก ๋๋ฆด ์๋ ์๊ณ ๋ค์ ์์ผ๋ก ๋๋ฆด ์๋ ์๋ค.
โฐ ๋ฆฌ๋์ค์์ ๋ถ๋ณ์ฑ์ ์ ์งํด์ผ ํ๋ ์ด์ ๋ ๋ด๋ถ์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ ๋๋ ๊ฒ์ ๊ฐ์งํ๊ธฐ ์ํ์ฌ shallow equality ๊ฒ์ฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
โฐ ์ด๋ฅผ ํตํ์ฌ ๊ฐ์ฒด์ ๋ณํ๋ฅผ ๊ฐ์ง ํ ๋ ๊ฐ์ฒด์ ๊น์ํ ์์ชฝ๊น์ง ๋น๊ต๋ฅผ ํ๋ ๊ฒ์ด ์๋๋ผ ๊ฒํฅ๊ธฐ ์์ผ๋ก ๋น๊ต๋ฅผ ํ์ฌ ์ข์ ์ฑ๋ฅ์ ์ ์งํ ์ ์๋ค.
โฐ shallow equality : obejct๋ค์ ๋น๊ตํ ๋ ๊ทธ๋ค์ attribute๋ค์ ๋น๊ตํ์ง ์๊ณ , ๊ทธ๋ค์ reference๋ฅผ ๋น๊ตํ๋ค.
3. ๋ฆฌ๋์๋ ์์ ํจ์์ฌ์ผ ํ๋ค.
โฐ ์์ ํจ์ : ๋์ผํ ์ ๋ ฅ์ ๋ฐ์์ ๋ ์ธ์ ๋ ๋์ผํ ์ถ๋ ฅ์ ๋ด๋ ํจ์
โฐ ๋๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ํธ์ถ๋ ๋ฆฌ๋์ ํจ์๋ ์ธ์ ๋ ๋๊ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํด์ผํ๋ค.
'Study > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋ฆฌ์กํธ์ ๋ผ์ดํ ์ฌ์ดํด (2) | 2023.08.22 |
---|