3. useSyncExternalStore

useSyncExternalStore๋ž€?

  • useSyncExternalStore๋Š” ์™ธ๋ถ€ ์Šคํ† ์–ด๋ฅผ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๋Š” Reactํ›…์ด๋‹ค.

  • ์ „์—ญ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ๊ฐœ๋ณ„์ ์ธ ์ƒํƒœ์— ๋Œ€ํ•œ ์ €์žฅ, ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

์‚ฌ์šฉํ•˜๊ธฐ

/src/store/BaseStore.ts

export type Listener = () => void;

class BaseStore<Snapshot> {
  protected listeners = new Set<Listener>();

  snapshot = {} as Snapshot;

  addListener(listener: Listener): void {
    this.listeners.add(listener);
  }

  removeListener(listener: Listener): void {
    this.listeners.delete(listener);
  }

  publish() {
    this.listeners.forEach((listener) => listener());
  }

  getSnapshot() {
    return this.snapshot;
  }

  getListener() {
    return this.listeners;
  }
}

export default BaseStore;


const snapshot = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot?)

/src/store/BaseStore.test.ts


/src/store/CartStore.ts


/src/hooks/useCartStore.ts

์„ ํ˜ธ์ด์œ 

  • ๋ฆฌ์—‘ํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ›…์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๋ฆฌํ„ด ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ž‘์„ฑ์— ์šฉ์ดํ•˜๋‹ค.

Last updated