ํ๋ก์ ํธ์ ์ํ๊ด๋ฆฌ๋ฅผ ๋์
ํ ๋ ๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅด๋ ๊ฑด Redux
,
ํ์ง๋ง ๋๋ฌด ๋ฌด๊ฒ๊ณ ์ธํ
์ด ๋ง์์ ๋ญ๊ฐ ๊ฐ๋จํ ๋์์ด ์์๊น ์ฐพ๋ค๊ฐ Zustand
๋ฅผ ๋ง๋ฌ๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, ์ ๋ง ๊ฐ๋ณ๊ณ ์ง๊ด์ ์ธ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ค.
๋ ์ผ์ด๋ก '์ํ(state)'๋ผ๋ ๋ป.
Redux ์ฐฝ์์ Dan Abramov๋ ์ธ๊ธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
immer
์ devtools
๋ ์ง์import { create } from 'zustand'
interface BearState {
bears: number
increase: () => void
}
const useBearStore = create<BearState>((set) => ({
bears: 0,
increase: () => set((state) => ({ bears: state.bears + 1 })),
}));
// ์ฌ์ฉ
function Component() {
const bears = useBearStore((state) => state.bears);
const increase = useBearStore((state) => state.increase);
return <button onClick={increase}>๊ณฐ์ด {bears}๋ง๋ฆฌ ์์ต๋๋ค</button>;
}
ํญ๋ชฉ | Zustand | Redux |
---|---|---|
์ค์ | ๊ฑฐ์ ์์ | store , reducer , provider ๋ฑ ํ์ |
์ฑ๋ฅ ์ต์ ํ | selector ๋ก ์๋ ๋ถ๋ฆฌ ๋ฆฌ๋ ๋๋ง | useSelector + memo ์ต์ ํ ํ์ |
ํ์ ์คํฌ๋ฆฝํธ | ๊ธฐ๋ณธ ์ง์ (๋งค์ฐ ๊ฐ๋ ฅํจ) | ์ค์ ๋ง์ง๋ง ์ปค์คํ ๊ฐ๋ฅ |
๋ฏธ๋ค์จ์ด | devtools, persist, immer ๋ฑ ์ ํํ | redux-saga, thunk ๋ฑ ์ธ๋ถ ์ฌ์ฉ |
Zustand๋ ์ ๋ง "React์ ํจ๊ป ์ฐ๊ธฐ ์ํ ์ต์ํ์ ์ํ๊ด๋ฆฌ ๋๊ตฌ"๋ผ๋ ๋ง์ด ๋ฑ ๋ง๋ ๋๋์ด์๋ค.
Redux๋ฅผ ์ด๋ฏธ ์ด ๊ฒฝํ์ด ์๋ค๋ฉด ํจ์ฌ ๊ฐ๋ณ๊ณ ํธํ ๋์์ด ๋ ์ ์๊ณ ,
Selector ๋ฐฉ์ ๋๋ถ์ ๋ฆฌ๋ ๋๋ง๋ ์ฑ๋ฅ ์ธก๋ฉด์์ ๊น๋ํ๊ฒ ์ปจํธ๋กค ๊ฐ๋ฅํ๋ค๋ ์ ์ด ์ธ์์ ์ด์๋ค.
๐ง "Zustand๋ โ์๊ฐ๋ณด๋ค ๊ฐ๋ ฅํ ์์ ๋๊ตฌโ์ด๋ค."