UNPKG

@stainless-code/persist

Version:

Hydration-aware persistence for any reactive store — zero-dep persistSource core; codecs, backends, cross-tab transport, source + framework hydration adapters ship as opt-in recipes

51 lines (36 loc) • 1.38 kB
--- name: preact-persist description: Gate Preact UI on Persist hydration with useHydrated (preact/compat useSyncExternalStore). Use when avoiding flash of default state on async backends or wiring HydrationSignal into Preact. license: MIT metadata: type: framework library: "@stainless-code/persist" library_version: "0.4.1" framework: "preact" requires: - persist sources: - stainless-code/persist:src/adapters/frameworks/preact.ts --- # Preact hydration gate `@stainless-code/persist/frameworks/preact` mirrors the React adapter via `preact/compat` `useSyncExternalStore` (SSR snapshot always `true`). Not a state source — pair with a `./sources/*` adapter. ## Install ```bash bun add @stainless-code/persist preact ``` Peer: `preact` `>=10.19.0`. ## Minimal wiring ```tsx import { useHydrated } from "@stainless-code/persist/frameworks/preact"; const { hydrated } = useHydrated(prefsHydration); if (!hydrated) return <Skeleton />; return <PrefsView />; ``` `prefsHydration = toHydrationSignal(persist)` from your store module. ## Common mistakes - **Importing `/frameworks/react` in a Preact app.** Use this subpath. - **Treating the hook as state.** Read the store separately. - **Null signal ≠ loading** — means no persist → hydrated. ## API surface - `useHydrated(signal) → { hydrated: boolean }` See also: `react-persist` (same contract).