ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

web/zustand

reateWithEqualityFn

dev_been94 2024. 12. 14. 16:37
728x90
๋ฐ˜์‘ํ˜•

reateWithEqualityFn

 

๐ŸŽฏ 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๋กœ ์„ค์ •
);

 

๐Ÿ” ์ฝ”๋“œ ์„ค๋ช…

  1. createWithEqualityFn
    • Zustand์˜ ์ƒํƒœ(store)๋ฅผ ๋งŒ๋“ค ๋•Œ, ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋น„๊ต ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์š”.
  2. Object.is
    • JavaScript์˜ ๊ธฐ๋ณธ ๋น„๊ต ํ•จ์ˆ˜๋กœ, ๊ฐ’๊ณผ ์ฐธ์กฐ๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ๋น„๊ตํ•ด์š”.
    • ์˜ˆ๋ฅผ ๋“ค์–ด 1 === 1์€ true์ด๊ณ , {} === {}๋Š” false์ž…๋‹ˆ๋‹ค.
  3. ์ƒํƒœ ๋น„๊ต ๊ธฐ์ค€
    • ์—ฌ๊ธฐ์„œ๋Š” **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 ์‚ฌ์šฉ ์‹œ ์žฅ์ 

  1. ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ๋ฐฉ์ง€
    • ์ƒํƒœ๊ฐ€ ์ •๋ง ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ๋งŒ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธํ•˜๋‹ˆ๊นŒ ์„ฑ๋Šฅ์ด ์ข‹์•„์ ธ์š”.
  2. ๋น„๊ต ๊ธฐ์ค€์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•
    • ๋‹จ์ˆœํžˆ ๊ฒ‰์œผ๋กœ๋งŒ ๋น„๊ตํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ๊นŠ์€ ๋น„๊ต๋‚˜ ๋ณต์žกํ•œ ๊ธฐ์ค€์„ ์ง์ ‘ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.
  3. ๋” ์ •๊ตํ•œ ์ƒํƒœ ๊ด€๋ฆฌ
    • ์ƒํ™ฉ์— ๋งž๊ฒŒ ๋น„๊ต ๊ธฐ์ค€์„ ์„ ํƒํ•˜๋ฉด ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๋” ์„ธ๋ฐ€ํ•ด์ ธ์š”.

 

๐ŸŒŸ ํ•œ ์ค„ ์š”์•ฝ

createWithEqualityFn์€ Zustand ์ƒํƒœ ๊ด€๋ฆฌ์—์„œ ๊ฐ’์ด ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ธฐ์ค€์„ ์ง์ ‘ ์„ค์ •ํ•ด์ฃผ๋Š” ๋„๊ตฌ์˜ˆ์š”.
๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿš€

728x90
๋ฐ˜์‘ํ˜•

'web > zustand' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

create  (1) 2024.12.14
createStore  (1) 2024.12.14
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/11   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•
250x250