restate / v1.0.0

API 參考

@kkwaenggwari/restate 1.0 的所有匯出,以及它們的參數、回傳值與行為。

本頁內容匯出store 方法持久化 store 方法persistedRestate 選項狀態欄位restateManager 與 scope.manager儲存轉接器介面

匯出

在 Web 與 React Native 上,一切都從 @kkwaenggwari/restate 匯入。

匯出回傳用途
restate(initial, updater | options?)store Hook建立共享的記憶體 store。
persistedRestate(initial, options)持久化 store Hook建立透過儲存空間還原與儲存的 store。
useRestateScope(factory?)工廠函式的結果或 scope在元件中擁有 store;卸載後銷毀。
createRestateScope()RestateScope在 React 之外擁有 store;用完後呼叫 destroy()。
shallow(left, right)boolean對選取結果做一層比較。
batch(callback)回呼的回傳值多次變化後只通知訂閱者一次。
restateManagerRestateManager等待啟動資料,並對全域 store 執行批次操作。
createIndexedDBStorage(options?)RestateStorage以自訂的資料庫名稱或存放區名稱建立 IndexedDB 轉接器。
createMMKVStorage(options?)RestateStorage以你自己的實例或設定建立 MMKV 轉接器。

store 方法

store 是一個可以當作 Hook 呼叫的函式,並具有以下方法。

成員說明
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。

持久化 store 方法

persistedRestate 回傳的 store 額外具有以下成員。

成員說明
ready自動載入結束時(即使失敗)完成的 Promise。請檢查 status()。
save()寫入目前的值;以實際寫入的值 resolve。
restore()把已儲存的值讀進記憶體。
hasSaved()是否存在已儲存的紀錄。
clearStorage()刪除已儲存的紀錄;記憶體不變。
resetAndClearStorage()把記憶體重設為初始值,並刪除已儲存的紀錄。
initialize()重新載入,例如在修正失敗的紀錄之後。
status()凍結的狀態快照;在某個欄位改變之前都是同一個物件。
useStatus(selector?, isEqual?)狀態或選取的部分改變時重新渲染的 Hook。
key / storageKey / storage邏輯 key、加上命名空間的 key,以及正在使用的轉接器。

persistedRestate 選項

key 為必填,其他選項都是選用的。

選項預設值意義
key必填紀錄的邏輯 key。
namespace"@kkwaenggwari/restate"儲存 key 的前綴;設為空字串即可停用。
storageIndexedDB / MMKV用來取代平台預設值的轉接器。
autoSavefalsetrue 會在每次變化後儲存;{ delayMs } 會等待停頓。
version / migrate1 / 無紀錄的版本,以及如何升級舊紀錄。
validate無在儲存前,以及還原或遷移後檢查值。
serializerJSON自訂的 serialize 與 deserialize 函式。
operationTimeoutMs30000單一儲存操作的時間上限。
maxPendingOperations256允許等待的操作數,包含正在執行的那一個。
maxStorageCharacters5242880編碼後值的最大長度,以 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

每個管理器都會追蹤註冊到它的持久化 store。

成員說明
ready等待存取時已註冊的 store;以 BULK_OPERATION_FAILED 拒絕。
saveAll(options?) / restoreAll(options?)對每個 store 執行 save 或 restore;{ concurrency } 可限制平行數量。
clearStorageAll() / resetAll() / resetAllAndClearStorage()清除紀錄、重設記憶體,或兩者都做。
list() / get(idOrKey) / size()檢視已註冊的 store。
subscribe(listener) / status()觀察管理器事件與監聽器錯誤。
destroyAll()銷毀所有已註冊的 store。

儲存轉接器介面

把具有以下方法的物件當作 storage 傳入。每個方法都可以回傳值或 Promise。

方法說明
getItem(key, context?)回傳已儲存的字串或 null。
setItem(key, value, context?)儲存字串。
removeItem(key, context?)刪除紀錄。
isAvailable?()同步回報儲存空間是否可用。
clear?() / close?()選用的清除與清理。
coordinationKey?在包裝同一個底層儲存空間的多個轉接器之間共用的物件。

搜尋文件

搜尋所有指南的標題、說明與內文。