@genshi/react
Version:
A simple, composable and effective JavaScript state management library for React
31 lines (30 loc) • 892 B
JavaScript
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
};