ilokesto

Store 클래스

Store<T>@ilokesto/store가 내보내는 유일한 public class입니다.

import { Store } from "@ilokesto/store";

const store = new Store({ ready: false });

Constructor

new Store<T>(initialState: T)

constructor는 initialState를 첫 현재 상태로 저장하고, 동시에 getInitialState()가 반환할 값으로 보관합니다.

복제는 일어나지 않습니다. 객체를 전달했다면 소유권 규칙을 지키세요. store에 넘긴 뒤에는 그 객체를 불변 값처럼 다루는 편이 안전합니다.

getState()

getState(): Readonly<T>

현재 상태를 동기적으로 반환합니다. Readonly<T> 타입은 반환 값을 통해 직접 대입하는 일을 줄여주지만, 런타임 freeze를 만들지는 않으며 TypeScript 관점에서도 깊은 불변은 아닙니다.

const state = store.getState();
console.log(state.ready);

getState()는 다음 경우에 사용하세요.

  • 즉시 필요한 값을 계산할 때,
  • subscribe() 리스너 안에서,
  • 최신 snapshot을 렌더링해야 하는 어댑터 코드에서.

상태를 제자리에서 직접 수정하기 위한 통로로 사용하지 마세요.

getInitialState()

getInitialState(): Readonly<T>

constructor가 잡아 둔 정확한 초기 값을 반환합니다.

const initial = store.getInitialState();

getInitialState()는 store를 reset하지 않습니다. reset하려면 직접 초기 값을 setState()에 다시 전달하세요.

store.setState(store.getInitialState());

현재 상태가 이미 초기 상태와 같은 참조라면 Object.is 때문에 알림이 발생하지 않습니다. 객체 상태 reset에 구독자가 반응해야 한다면 같은 필드를 가진 새 객체를 전달하세요.

Public API 요약

  • Store<T>: 상태 값 하나를 소유합니다.
  • getState(): 현재 값을 읽습니다.
  • getInitialState(): constructor 값을 읽습니다.
  • setState(): 미들웨어 이후 값을 교체합니다.
  • subscribe(): 리스너를 등록하고 cleanup을 반환합니다.
  • pushMiddleware() / unshiftMiddleware(): 업데이트 미들웨어를 조합합니다.

목차