UNPKG

@genshi/react

Version:

A simple, composable and effective JavaScript state management library for React

31 lines (30 loc) 892 B
import * as Genshi from "@genshi/core"; export * from "@genshi/core"; import { useSyncExternalStore } from "react"; function createSubscriber(store) { return function subscription(callback) { const listener = store.subscribe(callback); return listener.remove; }; } function createSnapshot(store) { return function getSnapshot(accessor) { return function snapshot() { return accessor(store.getState()); }; }; } function createStore(initialState, config) { const store = new Genshi.Store(initialState, config); const subscriber = createSubscriber(store); const getSnapshot = createSnapshot(store); function useStore(accessor) { const snapshot = getSnapshot(accessor); const internalState = useSyncExternalStore(subscriber, snapshot, snapshot); return [internalState, store.dispatch]; } return [useStore, store]; } export { createStore };