ํฐ์คํ ๋ฆฌ ๋ทฐ

๐ฏ createWithEqualityFn์ด๋ ๋ฌด์์ธ๊ฐ์?
**createWithEqualityFn**์ Zustand์ ์ํ(store)๋ฅผ ๋ง๋ค ๋, ํน์ ๊ฐ์ด ๋ฐ๋์๋์ง ํ์ธํ๋ ๋ฐฉ์์ ์ง์ ์ ํ ์ ์๋๋ก ํด์ฃผ๋ ํจ์์์.
๊ฐ๋จํ๊ฒ ๋งํด:
- Zustand์ ์ํ๋ฅผ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ๊ฐ์ด ๋ฐ๋์๋์ง ํ์ธํ๊ณ ๊ทธ์ ๋ฐ๋ผ ํ๋ฉด์ ์ ๋ฐ์ดํธํด์.
- createWithEqualityFn์ ์ฌ์ฉํ๋ฉด ์ํ๊ฐ ๋ณ๊ฒฝ๋์๋์ง ๋น๊ตํ๋ **๊ธฐ์ค(ํจ์)**์ ์ฌ๋ฌ๋ถ์ด ์ง์ ์ ํ ์ ์์ด์.
๐ฆ ์ํ๋ฅผ ๋น๊ตํ๋ ์ด์
์ ๊ฐ์ ๋น๊ตํ ๊น์? ๐ค
- React์์ ์ํ๊ฐ ๋ฐ๋์์ ๋๋ง ํ๋ฉด์ ๋ค์ ๋ ๋๋งํด์.
- ๊ทธ๋ฐ๋ฐ ์ํ๋ฅผ ๋จ์ํ **"์ด์ ๊ฐ๊ณผ ์ ๊ฐ์ด ๋ค๋ฅด๋"**๋ง ํ์ธํ๋ฉด, ๋ถํ์ํ ๋ ๋๋ง์ด ์๊ธธ ์ ์์ด์.
๐งฉ ๊ธฐ๋ณธ Zustand ๋์
๊ธฐ๋ณธ์ ์ผ๋ก Zustand๋ **"์์ ๋น๊ต(Shallow Equality)"**๋ฅผ ์ฌ์ฉํด์.
์ฆ, ์ํ์ ๊ฐ์ด ๋ฌ๋ผ์ก๋์ง ๊ฒํฅ๊ธฐ์์ผ๋ก๋ง ๋น๊ตํ์ฃ .
์๋ฅผ ๋ค์ด ๋ณผ๊น์?
const state1 = { count: 1 };
const state2 = { count: 1 };
console.log(state1 === state2); // false (๊ฐ์ฒด๋ ์ฐธ์กฐ๊ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฐ์ง ์๋ค๊ณ ํ๋จ)
๊ฒ์ผ๋ก ๋ณด๊ธฐ์๋ ๊ฐ์ ๊ฐ์ด์ง๋ง, ๋ ๊ฐ์ฒด๋ ์ฐธ์กฐ๊ฐ์ด ๋ฌ๋ผ์ ๋ค๋ฅด๋ค๊ณ ํ๋จํด์.
์ด๋ฐ ์ํฉ์์ createWithEqualityFn์ ์ฌ์ฉํ๋ฉด ์ด๋ป๊ฒ ๋น๊ตํ ์ง๋ฅผ ์ ํ ์ ์์ด์.
๐ ๏ธ createWithEqualityFn ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
createWithEqualityFn์ ์ฌ์ฉํ๋ฉด ์ํ์ ๋น๊ต ๊ธฐ์ค์ ์ฐ๋ฆฌ๊ฐ ์ ํ ์ ์์ด์!
์ง์ ์์ ๋ฅผ ๋ณด๋ฉด์ ์ดํดํด ๋ณผ๊ฒ์.
1. Zustand ์คํ ์ด ๋ง๋ค๊ธฐ
import { createWithEqualityFn } from "zustand/traditional";
const useStore = createWithEqualityFn(
(set) => ({
count: 0,
increase: () => set((state) => ({ count: state.count + 1 })),
}),
Object.is // ๋น๊ต ๊ธฐ์ค์ Object.is๋ก ์ค์
);
๐ ์ฝ๋ ์ค๋ช
- createWithEqualityFn
- Zustand์ ์ํ(store)๋ฅผ ๋ง๋ค ๋, ๋ ๋ฒ์งธ ์ธ์๋ก ๋น๊ต ํจ์๋ฅผ ์ ๋ฌํด์.
- Object.is
- JavaScript์ ๊ธฐ๋ณธ ๋น๊ต ํจ์๋ก, ๊ฐ๊ณผ ์ฐธ์กฐ๋ฅผ ์๊ฒฉํ๊ฒ ๋น๊ตํด์.
- ์๋ฅผ ๋ค์ด 1 === 1์ true์ด๊ณ , {} === {}๋ false์ ๋๋ค.
- ์ํ ๋น๊ต ๊ธฐ์ค
- ์ฌ๊ธฐ์๋ **Object.is**๋ฅผ ์ฌ์ฉํด์ ์ํ๊ฐ ์ ๋ง ๋ฐ๋์๋์ง๋ฅผ ํ์ธํ๊ณ , ๋ฐ๋์์ ๋๋ง ํ๋ฉด์ ์ ๋ฐ์ดํธํด์.
2. ์ํ ๋น๊ต ๊ธฐ์ค์ ์ปค์คํฐ๋ง์ด์งํ๊ธฐ
๋น๊ต ๊ธฐ์ค์ ์ง์ ์ ์ํ ์๋ ์์ด์. ์๋ฅผ ๋ค์ด **๊น์ ๋น๊ต(Deep Equality)**๋ฅผ ์ ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ด๋ ๊ฒ ๋ง๋ค ์ ์์ด์.
import { createWithEqualityFn } from "zustand/traditional";
import isEqual from "lodash.isequal"; // lodash๋ฅผ ์ฌ์ฉํด์ ๊น์ ๋น๊ตํ๊ธฐ
const useStore = createWithEqualityFn(
(set) => ({
user: { name: "Alice", age: 25 },
updateUser: (newUser) => set({ user: newUser }),
}),
isEqual // ๊น์ ๋น๊ต ๊ธฐ์ค์ ์ค์
);
๐งฉ ์ ์ด๋ฐ ๊ธฐ๋ฅ์ด ํ์ํ ๊น์?
๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ง๊ธฐ ์ํด์์์!
- ์ํ๊ฐ ๋ฐ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๊ฐ์ ๊ฐ์ ๋, ํ๋ฉด์ด ๊ดํ ๋ค์ ๊ทธ๋ ค์ง ์ ์์ด์.
- createWithEqualityFn์ ์ฌ์ฉํ๋ฉด ์ํ ๋น๊ต๋ฅผ ๋ ์ ๊ตํ๊ฒ ํด์ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ด์.
๐ ๋น์ ๋ก ์ดํดํ๊ธฐ
์ฌ๋ฌ๋ถ์ด ํผ์๋ฅผ ์ฃผ๋ฌธํ๋ค๊ณ ์๊ฐํด ๋ด์. ๐
- ๊ธฐ๋ณธ Zustand: **"์ฃผ๋ฌธ๋ฒํธ๋ง ๋น๊ต"**ํด์ ํผ์๊ฐ ๋ค๋ฅธ ์ฃผ๋ฌธ์ธ์ง ํ๋จํด์. (์์ ๋น๊ต)
- createWithEqualityFn: **"ํผ์ ์ ์ฌ๋ฃ๊น์ง ๋น๊ต"**ํด์ ์ง์ง ๋ค๋ฅธ ํผ์์ธ์ง ํ์ธํด์. (๊น์ ๋น๊ต ๊ฐ๋ฅ)
๐ createWithEqualityFn ์ฌ์ฉ ์ ์ฅ์
- ๋ถํ์ํ ๋ ๋๋ง ๋ฐฉ์ง
- ์ํ๊ฐ ์ ๋ง ๋ฐ๋์์ ๋๋ง ํ๋ฉด์ ์ ๋ฐ์ดํธํ๋๊น ์ฑ๋ฅ์ด ์ข์์ ธ์.
- ๋น๊ต ๊ธฐ์ค์ ์ปค์คํฐ๋ง์ด์ง
- ๋จ์ํ ๊ฒ์ผ๋ก๋ง ๋น๊ตํ๋ ๊ฒ ์๋๋ผ, ๊น์ ๋น๊ต๋ ๋ณต์กํ ๊ธฐ์ค์ ์ง์ ์ค์ ํ ์ ์์ด์.
- ๋ ์ ๊ตํ ์ํ ๊ด๋ฆฌ
- ์ํฉ์ ๋ง๊ฒ ๋น๊ต ๊ธฐ์ค์ ์ ํํ๋ฉด ์ํ ๊ด๋ฆฌ๊ฐ ๋ ์ธ๋ฐํด์ ธ์.
๐ ํ ์ค ์์ฝ
createWithEqualityFn์ Zustand ์ํ ๊ด๋ฆฌ์์ ๊ฐ์ด ๋ฐ๋์๋์ง ํ์ธํ๋ ๊ธฐ์ค์ ์ง์ ์ค์ ํด์ฃผ๋ ๋๊ตฌ์์.
๋ถํ์ํ ๋ ๋๋ง์ ์ค์ด๊ณ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค! ๐
'web > zustand' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| create (1) | 2024.12.14 |
|---|---|
| createStore (1) | 2024.12.14 |
- Total
- Today
- Yesterday
- Store
- state
- image pull
- useinsertioneffect
- usedeferredvalue
- Props
- preconnect
- useformstatus
- useid
- dns-prefetch
- react
- ์ํ๊ด๋ฆฌ
- useRef
- component
- prefetchdns
- zustand
- react hook
- react dom hook
- flushsync
- experimental_taintobjectreference
- ์คํ์
- experimental
- ์ ์ฅ์
- experimental_taintuniquevalue
- ์ธ๋ถํฐํธ
- ๋ฒ ํ
- react dom
- private regisirty
- finddomnode
- Nextjs
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |