์ํ(state)๋ UI์ ๋ฐ์ํ๊ธฐ ์ํด ์ ์งํด์ผํ ๊ฐ์ด๋ค. ๋ฆฌ์กํธ์์๋ ์ปดํฌ๋ํธ์ ์ ์ฅํ ๋ฐ์ดํฐ(์ํ)๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๊ทธ์ ๋ฐ๋ผ UI๊ฐ ์๋์ผ๋ก ๊ฐฑ์ ๋๋ค. ๋ฐ๋ผ์ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ํ๊ฐ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ํ๊ฐ์ ๋ฐ๋ผ ํ๋ฉด์ด ๋ถํ์ํ๊ฒ ์ ๋ฐ์ดํธ๋์ง ์๋๋ก ์ฃผ์ํด์ผ ํ๋ค.
์ํ๋ ๋๊ฐ์ง๋ก ๊ตฌ๋ถํ ์ ์๋๋ฐ ์ง์ญ์ํ์ ์ ์ญ์ํ์ด๋ค. ์ง์ญ์ํ์ ๊ฒฝ์ฐ useState๊ฐ์ด ์ปดํฌ๋ํธ ๋ด์์ ํ ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ฆฌ์กํธ๋ ๋จ๋ฐฉํฅ์ ํน์ฑ์ ์ง๋๊ธฐ ๋๋ฌธ์ ์์ ์ปดํฌ๋ํธ๋ก ์ํ๋ฅผ ์ ๋ฌํ ์ ์๊ณ , props๋ก ํ์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ ์ ์๋ค. ์ ์ญ์ํ๋ ์ด๋ค ํ๋ฆ์ ์ฝ๋ฉ์ด์ง ์๊ณ ์ ์ญ์์ ์ฌ์ฉ๊ฐ๋ฅํ ์ํ๋ฅผ ๋งํ๋ค.
ํ๋์ ์ํ๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ด๋ป๊ฒ๋ ์์์ ์ปดํฌ๋ํธ์์ props๋ก ์ ๋ฌํด์ ์ฌ์ฉํ ์ ์์ง๋ง props์ ์ ๋ฌ์ด ๋ง์์ง์๋ก ์ฝ๋๋ฅผ ์ฝ์ ๋ ํด๋น prop์ ์ถ์ ํ๊ธฐ ํ๋ค์ด์ง๊ณ ๊ทธ์ ๋ฐ๋ผ ์ ์ง๋ณด์๋ ๋์ฑ ์ด๋ ค์์ง๊ธฐ ๋๋ฌธ์ ์ ์ญ ์ํ ๊ด๋ฆฌ๋ฅผ ํ ํ์๊ฐ ์๋ค.
๐ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋๊ตฌ
๐ Context API
์ ์ญ ์ํ๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ๋ฆฌ์กํธ์์ ๋ง๋ค์๋ค. ํธ๋ฆฌ ๋จ๊ณ๋ง๋ค ๋ช ์์ ์ผ๋ก props๋ฅผ ๋๊ฒจ์ฃผ์ง ์์๋ ๋ง์ ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ ๊ณต์ ํ๋๋ก ํ ์ ์๋ค.
Context API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Context, Provider, Consumer ์ธ ๊ฐ์ง๋ฅผ ์์งํด์ผ ํ๋ค.
Context
์ ์ญ ์ํ๋ฅผ ์ ์ฅํ๋ ์ญํ
Context ๋ด๋ถ์ Provider์ Consumer๊ฐ ์ ์๋์ด์๊ณ , Consumer๋ Context๋ฅผ ํตํด์ ์ํ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
Provider
์ ์ญ ์ํ๋ฅผ ์ ๊ณตํ๋ ์ญํ
Context์ ์ํ๋ฅผ ์ ๊ณตํด์ ๋ค๋ฅธ ์ปดํฌ๋ํธ๊ฐ ์ํ์ ์ ๊ทผํ ์ ์๋๋ก ๋์์ค๋ค. ์ ๊ณต๋ ์ํ์ ์ ๊ทผํ๊ธฐ ์ํด์๋ Provider ํ์์ ์ปดํฌ๋ํธ๊ฐ ํฌํจ๋์ด์์ด์ผํ๋ค. ๋ณดํต ๋ชจ๋ ์ปดํฌ๋ํธ์ ์ ๊ทผํด์ผํ๋ ์ํ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด์๋ ๋ฃจํธ ์ปดํฌ๋ํธ์์ Provider๋ฅผ ์ ์ํ๋ค.
Consumer
์ ๊ณต๋ฐ์ ์ ์ญ ์ํ๋ฅผ ๋ฐ์์ ์ฌ์ฉํ๋ ์ญํ
Context๋ Consumer ์ฌ์ด์ ์๋ ์ฒซ ๊ฐ์ฒด๋ฅผ Context์ ์ธ์๋ก ์ ๋ฌํ๊ธฐ ๋๋ฌธ์, ๋ฐ๋ก JSX๋ฅผ ์์ฑํ๋ฉด ์๋๊ณ , ๋น ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋์ JSX๋ฅผ ์์ฑํด์ผํ๋ค.
const MyContext = React.createContext(defaultValue);
// defaultValue ๋งค๊ฐ๋ณ์๋ ํธ๋ฆฌ ์์์ ์ ์ ํ Provider๋ฅผ ์ฐพ์ง ๋ชปํ์ ๋๋ง ์ฐ์ด๋ ๊ฐ
const [value, setValue] = useState(์ด๊ธฐ๊ฐ)
return (
<MyContext.Provider value={{value, setValue}}>
<ํ์ ์ปดํฌ๋ํธ />
...
</MyContext>
)
return(
<ThemeContext.Consumer>
{value => <span>{value}</span>}
</ThemeContext.Consumer>
)
useContext hook์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
const {value, setValue} = useContext(MyContext);
return (
<div>
<span>{value}</span>
</div>
);
๐ ์ฅ์
- React์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋ณ๋ ์ค์น ํ์ํ์ง ์๋ค.
๐ฅฒ ๋จ์
- ์ปจํ ์คํธ๊ฐ ๋๋ฌ์ผ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋๋๋ง๋๋ค. (memo ์ฌ์ฉ์ผ๋ก ๋ฐฉ์ง ๊ฐ๋ฅ)
๐ Redux
Flux ํจํด์ ์ ์ฉํ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Store ์ ์ํ๋ค์ ์ ์ฅํ๊ณ , ํด๋น ์ด๋ ํ ๋ณํ๊ฐ ํ์ํ ๋ Action ์ Dispatch ํ์ฌ Reducer ์์ ์ด๋ฅผ ๋ฐ์ ์ ํด๋์ ํ๋ฆ์ผ๋ก ์ํ๋ฅผ ๋ณํ์ํค๋ ๋ฐฉ์
Redux์ 3์์น
1. ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ ์ํ๋ ํ๋์ ์คํ ์ด ์์ ํ๋์ ๊ฐ์ฒด ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์ ์ฅ๋ฉ๋๋ค.
2. ์ํ๋ ๋ถ๋ณ(์ฝ๊ธฐ ์ ์ฉ) ๋ฐ์ดํฐ ์ด๋ฉฐ, ์ค์ง ์ก์
๋ง์ด ์ํ ๊ต์ฒด๋ฅผ ์์ฒญ ํ ์ ์์ต๋๋ค.
3. ์ก์
์ ์ํด ์ํ ํธ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๋ณํํ๋ ์ง๋ฅผ ์ง์ ํ๊ธฐ ์ํด ์์ ๋ฆฌ๋์๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
Store
์ ์ญ์ํ๋ฅผ ์ ์ฅํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด ํํ๋ก ์ ์ฅ๋์ด ์์ผ๋ฉฐ, ์ค์ง Reducer๋ฅผ ํตํด์๋ง ์ ๊ทผํ ์ ์๋ค. Store๋ 1๊ฐ๋ง ์กด์ฌํ ์ ์๋ค.
Action
Reducer์๊ฒ ๋ณด๋ด๋ Store์ ๋ํ ํ๋์ ์ ์ํ๋ค.
Action์ Reducer์๊ฒ ์ ๋ฌํ๊ธฐ ์ํด์๋ dispatch ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผํ๋ค. dispatch๋ Store์ ๋ด์ฅ ํจ์ ์ค ํ๋๋ก ์ก์ ๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ค์ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ค. ์ด๋ฒคํธ๋ฅผ ์ผ์ด๋๊ฒํ๋ ์ด๋ฒคํธ ํธ๋ฆฌ๊ฑฐ์ ์ญํ ์ ํ๋ค.
Reducer
์ด์ ์ํ์ ์ก์ ์ ๋ฐ์, ๋ค์ ์ํ๋ฅผ ๋ฐํํ๋ ์ญํ
Reducer๋ฅผ ํตํด์๋ง ์ ์ญ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ๋ฐ์ดํธํ ์ ์๋ค. ์ด๋ค ์ก์ ์ด ๋ค์ด์ค๋์ง ๊ทธ ์ ํ์ ๋ฐ๋ผ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ผ๊ณ ๋ณผ ์ ์๋ค. ์ด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ค๋ ์ ์ด ์๋๋ผ ์๋ก์ด ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๋ฐํํด์ผ ํ๋ค.
dispatch
action์ ๋ฐ์์ํค๋ ๊ฒ
์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ store.dispatch() ๋ฉ์๋๋ฅผ ๋ถ๋ฅด๊ณ action ๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ฃผ๋ ๊ฒ์ด๋ค.
๐ ์ฅ์
- ์ธ๋ถ์์ ๊ด๋ฆฌ Context API์ฒ๋ผ ๋ฆฌ๋๋๋ง x
๐ฅฒ ๋จ์
- ๋ฆฌ๋์ค ์คํ ์ด ํ๊ฒฝ ์ค์ ์ ๋ณต์ก์ฑ
- ๋ฆฌ๋์ค๋ฅผ ์ ๋๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋ถ๋ ์ฌ๋ฌ๊ฐ์ ๋ฏธ๋ค์จ์ด
- ๋ณด์ผ๋ฌํ๋ ์ดํธ, ์ฆ ์ด๋ค ์ผ์ ํ๊ธฐ ์ํด ๊ผญ ์์ฑํด์ผ ํ๋ (์์ฉ๊ตฌ)์ฝ๋๊ฐ ๋ง์ด ์๊ตฌ๋๋ค.
- ์ค๊ณ ์ฒ ํ์ ์๊ตฌ๋๋ ์ฝ๋ฉ ๋ฐฉ์์ ๊ผญ ์ถ๊ตฌํด์ผํด์ ์คํ๋ ค ์ฝ๋๊ฐ ๋ณต์กํด์ง์ ์๋ค.
๐ Recoil
Context API ๊ธฐ๋ฐ์ผ๋ก ํ์ด์ค๋ถ์์ ๋ง๋ ํจ์ํ ์ปดํฌ๋ํธ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์ญ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
Recoil ์ ์ฌ์ฉํ๋ ค๋ฉด ์์ ์ปดํฌ๋ํธ(App ๋๋ Router)๋ฅผ RecilRoot ๋ฅผ ํตํด์ ๊ฐ์ธ์ค์ผ ํ๋ค.
function App() {
return (
<RecoilRoot>
<Router />
</RecoilRoot>
);
}
Atoms๋ ์ํ์ ๋จ์์ด๋ฉฐ, ์ ๋ฐ์ดํธ์ ๊ตฌ๋ ์ด ๊ฐ๋ฅํ๋ค.
๊ณ ์ ๊ฐ์ธ key๋ฅผ ์ค์ ํด์ฃผ๊ณ default์ ๊ธฐ๋ณธ๊ฐ์ ํ ๋นํด์ค๋ค.
export const userState = atom<userProps>({
key: `userState/${v1()}`,
default: {
id: '',
nickname: '',
hair: '',
},
});
const [user, setUser] = useRecoilState(userState);
Selector๋ atoms๋ ๋ค๋ฅธ selectors๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์๋ค์ด๋ ์์ ํจ์(pure function)๋ค.
์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ต์ํ์ ์ํ ์งํฉ๋ง atoms์ ์ ์ฅํ๊ณ ๋ค๋ฅธ ๋ชจ๋ ํ์๋๋ ๋ฐ์ดํฐ๋ selectors์ ๋ช ์ํ ํจ์๋ฅผ ํตํด ํจ์จ์ ์ผ๋ก ๊ณ์ฐํจ์ผ๋ก์จ ์ธ๋ชจ์๋ ์ํ์ ๋ณด์กด์ ๋ฐฉ์งํ๋ค.(https://recoiljs.org/ko/docs/introduction/core-concepts/)
const showUserState = selector({
key: 'showUserState',
get: ({get}) => {
const {id, nickname, hair} = get(userState);
return `
id: ${id}
nickname: ${nickname}
hair: ${hair}
`;
},
});
์ฅ์
- ๋ฌ๋์ปค๋ธ๊ฐ ์๋ค.
- ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๋ด์ฅ๋์ด ์๋ค.
๋จ์
- ํจ์ํ ์ปดํฌ๋ํธ์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅ
๐ Zustand
fluxํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ฐ์ ์ค์์ ์ง์ค๋ ํ์์ ์คํ ์ด ๊ตฌ์กฐ๋ฅผ ํ์ฉํ๋ค.
// store.js
import create from 'zustand' // create๋ก zustand๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
const useStore = create(set => ({
count: 0,
increase: () => set(state => ({ count: state.count + 1 })),
resetCount: () => set({ count: 0 })
}))
export default useStore
import useStore from '../store.js'
const { count, increase, resetCount } = useStore(state => state)
์ฅ์
- Context API๋ฅผ ์ฌ์ฉํ ๋์ ๋ฌ๋ฆฌ ์ํ ๋ณ๊ฒฝ ์ ๋ถํ์ํ ๋ฆฌ๋๋๋ง์ ์ผ์ผํค์ง ์๋๋ก ์ ์ดํ๊ธฐ ์ฝ๋ค.
- ์ํ ๋ณ๊ฒฝ ์ ๋ถํ์ํ ๋ฆฌ๋๋๋ง์ ์ผ์ผํค์ง ์๋๋ก ์ ์ดํ๊ธฐ ์ฝ๋ค.
- ๋ฌ๋์ปค๋ธ๊ฐ ์๋ค.
๋จ์
- ๋จ์ ์ ์ ๋ชจ๋ฅด๊ฒ ๋ค..
๐ jotai
atomic ํจํด์ผ๋ก ํ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
import { atom } from 'jotai'
const countAtom = atom(0);
const mangaAtom = atom({ 'label': '', 'content': '' });
const [count, setCount] = useAtom(countAtom)
3๊ฐ์ง์ atom ํํ
- ์ฝ๊ธฐ ์ ์ฉ atom
- ์ฐ๊ธฐ ์ ์ฉ atom
- ์ฝ๊ธฐ-์ฐ๊ธฐ atom
const readOnlyAtom = atom((get) => get(priceAtom) * 2);
const writeOnlyAtom = atom(
null, // ์ฒซ ๋ฒ์งธ ์ธ์์ 'null'์ ์ ๋ฌํ๋ ๊ท์น์
๋๋ค.
(get, set, update) => {
// update๋ atom์ ์
๋ฐ์ดํธํ๊ธฐ ์ํด ๋ฐ์์ค๋ ๊ฐ์
๋๋ค.
set(priceAtom, get(priceAtom) - update.discount)
}
);
const readWriteAtom = atom(
(get) => get(priceAtom) * 2,
(get, set, newPrice) => {
set(priceAtom, newPrice / 2)
// ๋์์ ์ํ๋ ๋งํผ atom์ ์ค์ ํ ์ ์์ต๋๋ค.
}
);
์ถ๊ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ด ์ผ๋ถ ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ Recoil๋ณด๋ค ์ ํธ๋๋ ๊ฒฝํฅ์ด ์๋ค๊ณ ํ๋ค.
- ๊ฒฝ๋ํ๋ API (Minimalistic API)
- String key์ ๋ฏธ์ฌ์ฉ
- ํ์ ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ
- utils ํจ์๋ค์ ์ ๊ณต
jotai๋ ์์ง ์ฌ์ฉํด๋ณด์ง ์์๋๋ฐ ๋ค์ ํ๋ก์ ํธ์์ ํ ๋ฒ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ๋ค. Redux๋ฅผ ์ฒ์ ์ฌ์ฉํด๋ณด์์ ๋ ์๊ฐ๋ณด๋ค ๋ณต์กํด์ ์ด๋ ค์์ด ์์๋๋ฐ Recoil, Zustand๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋๋ฌด ์ ์ธ๊ณ์๋ค. ์ ์ ๋ง์ ์ ์ญ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ๋์ค๋๋ฐ ์ ์ ๊ฐ์ํ๋๊ณ ์ฌ์ฉ๋ฐฉ๋ฒ์ด ํธํด์ง๋ ๊ฒ ๊ฐ๋ค. Recoil์ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์์ ๊ณค๋ํ ์ ์ด ์์๋๋ฐ ํด๋์ค ๋ด์์ ์ ์ญ์ํ๋ฅผ ๋ฐ์๋ณด๋ ค๊ณ ํ์ ๋์๋ค. ํ๋ก์ ํธ ํ๋ฐ๋ถ๋ผ ๋ฐ๊พธ์ง ๋ชปํ๊ณ emitter๋ฅผ ํตํด ์ฐํํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์๋๋ฐ, ๋ค์ํ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด๋ณด๊ณ ์ํฉ์ ๋ง๋ ๊ธฐ์ ์คํ ์ ์ ์ ํด์ผ๊ฒ ๋ค!
๐ ์ฐธ๊ณ
๋ฆฌ์กํธ ์ํ๊ฐ(state)์ด๋? - out.log
๋ฆฌ์กํธ์์ ์ํ๊ฐ(state)์ด๋? ์ปดํฌ๋ํธ ๋ด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ ์ฅ์. UI(์๋ฆฌ๋จผํธ)์ ๋ฐ์ํ๊ธฐ ์ํด ์ ์งํด์ผํ ๊ฐ ๋ฌถ์์ด๋ค. ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ์ ์ฅํ ๋ฐ์ดํฐ๊ฐ ๋ณํํ๋ฉด UI๊ฐ ์๋์ผ๋ก ๊ฐฑ์
naon.me
https://abangpa1ace.tistory.com/241?category=905014
[Jotai] React ์ ์ญ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ด์ , ํ ์ด๋ฅผ ์งํํ๋ฉด์ React์ ์ ์ญ ์ํ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Recoil ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ฉํ๋ ์ ์ด ์๋ค. (๋งํฌ) [Recoil] ์ ์ญ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ - Recoil ์ ๋ณต๊ธฐ ๐ง ์๋ก ๊ต์ฅํ ์ค๋๋ง์ ์ฐ๋ ์๋ก
abangpa1ace.tistory.com
https://ui.toast.com/posts/ko_20210812
React ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Zustand์ ์ฝ๋๋ฅผ ํํค์ณ๋ณด์
TOAST UI Calendar์ ์๋ก์ด ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ๋์ ํ๊ธฐ ์ํด ์ฐธ๊ณ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Zustand์ ์ฝ๋๋ฅผ ๋ถ์ํด๋ณธ๋ค.
ui.toast.com
https://recoiljs.org/ko/docs/introduction/core-concepts/
์ฃผ์ ๊ฐ๋ | Recoil
๊ฐ์
recoiljs.org
https://ko.redux.js.org/introduction/getting-started/
Redux ์์ํ๊ธฐ | Redux
์๊ฐ > ์์ํ๊ธฐ: Redux๋ฅผ ๋ฐฐ์ฐ๊ณ ์ฌ์ฉํ๊ธฐ ์ํ ์๋ฃ
ko.redux.js.org
Context API๋? ์๊ฐ ๋ฐ ์ฌ์ฉ๋ฒ
Context API๋? Context API๋ ๋ฆฌ์กํธ์ ๋ด์ฅ๋ ๊ธฐ๋ฅ์ผ๋ก Props๋ฅผ ์ฌ์ฉํ์ง ์์๋ ํน์ ๊ฐ์ด ํ์ํ ์ปดํฌ๋ํธ๋ผ๋ฆฌ ์ฝ๊ฒ ๊ฐ์ ๊ณต์ ํ ์ ์๊ฒ ํด ์ค๋ค. ์ฃผ๋ก ํ๋ก์ ํธ์์ ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํ ๋ ๋ง์ด ์ฌ
devbksheen.tistory.com
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋ฆฌ์กํธ ์์คํ์ค?! (React Suspense) (0) | 2023.04.27 |
---|---|
[React] ๋ผ์ดํ ์ฌ์ดํด(Life Cycle ) (0) | 2023.03.27 |
[React] setState callBack ํจ์ (0) | 2022.12.23 |
[React] Lazy initialization (0) | 2022.12.22 |