restate / v1.0.0
API 레퍼런스
@kkwaenggwari/restate 1.0의 모든 export와 인자, 반환값, 동작.
Export
웹과 React Native 모두 @kkwaenggwari/restate에서 가져옵니다.
| Export | 반환 | 용도 |
|---|---|---|
restate(initial, updater | options?) | 스토어 훅 | 공유 메모리 스토어를 만듭니다. |
persistedRestate(initial, options) | 저장 스토어 훅 | 저장소로 복원하고 저장하는 스토어를 만듭니다. |
useRestateScope(factory?) | factory 결과 또는 scope | 컴포넌트가 스토어를 소유하고, 언마운트 뒤 파괴합니다. |
createRestateScope() | RestateScope | React 밖에서 스토어를 소유합니다. 끝나면 destroy()를 부르세요. |
shallow(left, right) | boolean | 선택값을 한 단계 깊이로 비교합니다. |
batch(callback) | 콜백의 결과 | 여러 변경 뒤 구독자에게 한 번 알립니다. |
restateManager | RestateManager | 시작 데이터를 기다리고 전역 스토어에 일괄 작업을 실행합니다. |
createIndexedDBStorage(options?) | RestateStorage | 데이터베이스나 store 이름을 정한 IndexedDB 어댑터를 만듭니다. |
createMMKVStorage(options?) | RestateStorage | 직접 만든 인스턴스나 설정으로 MMKV 어댑터를 만듭니다. |
스토어 메서드
스토어는 훅으로 호출하는 함수이며 아래 메서드를 가집니다.
| 멤버 | 설명 |
|---|---|
useStore() | 값 전체를 반환하고 변경마다 다시 렌더합니다. |
useStore(selector, isEqual?) | 선택값을 반환하고, isEqual(기본 Object.is)이 변화를 알릴 때 다시 렌더합니다. |
get() | 구독하지 않고 현재 값을 읽습니다. |
set(value | updater) | 값을 바꾸거나 이전 값으로 계산합니다. destroy() 뒤에는 무시됩니다. |
reset() | 선언한 초기값으로 되돌리고 그 값을 반환합니다. |
subscribe(listener) | 변경마다 listener(value, previous, event)를 부르고 구독 해제 함수를 반환합니다. |
subscribeSelector(selector, listener, isEqual?) | 선택값이 바뀔 때만 listener를 부릅니다. |
on(type, listener) | change, reset, save, error 같은 이벤트를 듣습니다. |
start() / stop() / isRunning() | updater를 직접 제어합니다. |
destroy() / isDestroyed() | 리스너와 updater를 해제합니다. 이후 구독은 STORE_DESTROYED를 던집니다. |
getInitial() / getServerSnapshot() / getError() | 초기값, 서버 스냅샷, 마지막 리스너 오류. |
id / kind | 고유 id, memory 또는 persistent. |
저장 스토어 메서드
persistedRestate는 아래 멤버가 더해진 스토어를 반환합니다.
| 멤버 | 설명 |
|---|---|
ready | 자동 불러오기가 끝나면 실패하더라도 이행되는 Promise. status()를 확인하세요. |
save() | 현재 값을 쓰고, 실제로 쓴 값으로 이행됩니다. |
restore() | 저장된 값을 메모리로 읽어 옵니다. |
hasSaved() | 저장된 기록이 있는지 알려 줍니다. |
clearStorage() | 저장된 기록을 지웁니다. 메모리는 그대로입니다. |
resetAndClearStorage() | 메모리를 초기값으로 되돌리고 저장된 기록을 지웁니다. |
initialize() | 예를 들어 실패한 기록을 고친 뒤 다시 불러옵니다. |
status() | 고정된 상태 스냅샷. 필드가 바뀌기 전까지 같은 객체입니다. |
useStatus(selector?, isEqual?) | 상태나 선택한 부분이 바뀔 때 다시 렌더하는 훅. |
key / storageKey / storage | 논리 키, namespace가 붙은 키, 사용 중인 어댑터. |
persistedRestate 옵션
key만 필수이고 나머지는 선택입니다.
| 옵션 | 기본값 | 의미 |
|---|---|---|
key | 필수 | 기록의 논리 키. |
namespace | "@kkwaenggwari/restate" | 저장 키의 접두어. 빈 문자열이면 붙이지 않습니다. |
storage | IndexedDB / MMKV | 플랫폼 기본값 대신 쓸 어댑터. |
autoSave | false | true는 변경마다, { delayMs }는 변경이 멈춘 뒤 저장합니다. |
version / migrate | 1 / 없음 | 기록 버전과 이전 기록을 올리는 방법. |
validate | 없음 | 저장 전과 복원·마이그레이션 뒤에 값을 검사합니다. |
serializer | JSON | 직접 만든 serialize, deserialize 함수. |
operationTimeoutMs | 30000 | 저장소 작업 하나의 시간 제한. |
maxPendingOperations | 256 | 실행 중인 작업을 포함해 기다릴 수 있는 작업 수. |
maxStorageCharacters | 5242880 | UTF-16 코드 단위로 센 인코딩 값의 최대 길이. |
updater / managed / serverSnapshot / onError | — | restate 옵션과 같습니다. |
상태 필드
status()와 useStatus()는 아래 필드를 반환합니다.
| 필드 | 의미 |
|---|---|
ready | 자동 불러오기가 끝났습니다. |
dirty | 메모리가 마지막으로 불러오거나 저장하거나 복원한 값과 다릅니다. |
operation | 지금 실행 중인 저장소 작업, 없으면 null. |
pending | 실행 중인 작업을 포함해 아직 끝나지 않은 저장소 작업 수. |
blocked | 중단되거나 시간 초과된 어댑터 호출이 아직 끝나지 않았습니다. |
available | 저장소를 쓸 수 있는지 여부. |
error / observerError | 마지막 저장소 오류, 마지막 상태 리스너 오류. |
lastSavedAt / lastRestoredAt | 마지막 성공 시각(epoch 밀리초), 없으면 null. |
restateManager와 scope.manager
각 manager는 자신에게 등록된 저장 스토어를 추적합니다.
| 멤버 | 설명 |
|---|---|
ready | 접근한 시점에 등록된 스토어를 기다립니다. BULK_OPERATION_FAILED로 거부될 수 있습니다. |
saveAll(options?) / restoreAll(options?) | 모든 스토어를 저장하거나 복원합니다. { concurrency }로 병렬 작업을 제한합니다. |
clearStorageAll() / resetAll() / resetAllAndClearStorage() | 기록을 지우거나, 메모리를 되돌리거나, 둘 다 합니다. |
list() / get(idOrKey) / size() | 등록된 스토어를 살펴봅니다. |
subscribe(listener) / status() | manager 이벤트와 리스너 오류를 관찰합니다. |
destroyAll() | 등록된 모든 스토어를 파괴합니다. |
저장소 어댑터 인터페이스
아래 메서드를 가진 객체를 storage로 넘기세요. 모든 메서드는 값이나 Promise를 반환할 수 있습니다.
| 메서드 | 설명 |
|---|---|
getItem(key, context?) | 저장된 문자열이나 null을 반환합니다. |
setItem(key, value, context?) | 문자열을 저장합니다. |
removeItem(key, context?) | 기록을 지웁니다. |
isAvailable?() | 저장소를 쓸 수 있는지 동기적으로 알려 줍니다. |
clear?() / close?() | 선택적인 비우기와 정리. |
coordinationKey? | 같은 실제 저장소를 감싸는 어댑터들이 공유하는 객체. |