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