コンテンツにスキップ

索引

SynStateはアプリケーションの状態を管理するためのシンプルで直感的なAPIを提供します:

イベント駆動パターンのための組み込みイベントエミッター:

複雑なシナリオに対応するため、SynStateはObservableベースのAPIを提供します:

  • source<T>(): 新しいObservableソースを作成(RxJSのsubjectとほぼ同等)。
  • just(value): 単一の静的な値を保持し即座に完了するObservableを作成。switchMap 内の同期フォールバックとして有用。
  • fromPromise(promise): PromiseからObservableを作成。
  • fromSubscribable(): 任意のsubscribableオブジェクトからObservableを作成。
  • counter(ms): 一定間隔で値を発行(RxJSのintervalとほぼ同等)。
  • timer(delay): 遅延後に発行。
  • map(fn): 値を変換。
  • mapTo(value): すべての値を定数にマッピング。
  • getKey(key): オブジェクトからプロパティ値を抽出(別名: pluck)。
  • attachIndex(): 各値にインデックスを付与(別名: withIndex)。
  • mergeMap(fn): Observableにマッピングしてすべてをマージ(並列実行)(別名: flatMap)。
  • switchMap(fn): Observableにマッピングして最新に切り替え(前のものをキャンセル)。
  • audit(ms): 指定した時間ウィンドウ後に最後の値を発行(RxJSのauditTimeとほぼ同等)。
  • debounce(ms): 発行をデバウンス(RxJSのdebounceTimeとほぼ同等)。
  • throttle(ms): 発行をスロットル(RxJSのthrottleTimeとほぼ同等)。
  • isChildObservable(obs): ObservableがChild Observableかどうかを判定。
  • isManagerObservable(obs): ObservableがManager Observableかどうかを判定。
  • isRootObservable(obs): ObservableがRoot Observableかどうかを判定。

React / Preact Hooks (synstate-react-hooks / synstate-preact-hooks)

Section titled “React / Preact Hooks (synstate-react-hooks / synstate-preact-hooks)”

両パッケージは同一のAPI面を持ちます。React 18+にはsynstate-react-hooks、Preactにはsynstate-preact-hooksを使用してください。

  • useObservableValue(observable$): Observableを購読し、現在の値をコンポーネントの状態として返す。内部的にuseSyncExternalStoreを使用し、Observableが値を発行するとコンポーネントが再レンダリングされる。
  • useObservableValue(observable$, fallback): 上記と同じ。初期値を持たないObservableに対するフォールバック値を指定。
  • useObservableEffect(observable$, fn): Observableが値を発行するたびに副作用を実行。アンマウント時に自動的にサブスクリプションを解除。
  • useValueAsObservable(value): コンポーネントのpropやstateの値をsynstateのObservableに変換。React/Preactの状態をObservableグラフに橋渡しする際に有用。

コアのcreateState / createReducer / createBooleanStateを再エクスポートしますが、タプルの最初の要素としてraw Observableの代わりにフックuseCurrentValue)を返します:

  • createState(initialValue): [useCurrentValue, setState, { state, updateState, resetState, getSnapshot, initialState }]を返す。
  • createReducer(reducer, initialState): [useCurrentValue, dispatch, { state, getSnapshot, initialState }]を返す。
  • createBooleanState(initialValue): [useCurrentValue, { state, setTrue, setFalse, toggle, setState, updateState, resetState, getSnapshot, initialState }]を返す。

synstateのObservableとPreact Signalsを橋渡しし、コンポーネントの再レンダリングなしにきめ細かいDOM更新を実現します。hooksアプローチとの比較はインタラクティブデモを参照してください。

  • toSignal(observable$): Observable(またはInitializedObservable)をPreactのReadonlySignalに変換。SignalはObservableと同期し続ける。JSXに直接埋め込み可能 — コンポーネント全体ではなく、影響を受けるテキストノードのみが更新される。
  • toSignal(observable$, fallback): 上記と同じ。初期値を持たないObservableに対するフォールバック値を指定。
  • fromSignal(signal): PreactのSignalをsynstateのInitializedSourceObservableに変換。[observable, dispose]を返す。ObservableはSignalの値をミラーリングし、synstateのオペレーターチェーン(mapdebounceswitchMap等)を適用可能。

hooksラッパーと同じですが、フックの代わりに**ReadonlySignal**を返します:

  • createState(initialValue): [signal, setState, { state, updateState, resetState, getSnapshot, initialState }]を返す。
  • createReducer(reducer, initialState): [signal, dispatch, { state, getSnapshot, initialState }]を返す。
  • createBooleanState(initialValue): [signal, { state, setTrue, setFalse, toggle, setState, updateState, resetState, getSnapshot, initialState }]を返す。