UNPKG

killa

Version:

State management for Vanilla and React

31 lines (30 loc) 995 B
import { useRef } from "react"; import UseSyncExternalStoreShim from "use-sync-external-store/shim/with-selector.js"; import { deepEquals } from "killa/deep-equals"; import { SYMBOL_STORE } from "killa/constants"; const useSyncExternalStore = UseSyncExternalStoreShim.useSyncExternalStoreWithSelector; const fallbackSelector = (state) => state; const useStore = (store, selector = fallbackSelector, silect = false) => { if (store.$$store !== SYMBOL_STORE) { throw new Error("Provide a valid store for useStore."); } if (selector === null) { selector = fallbackSelector; silect = true; } const silentState = useRef(() => { const state2 = store.getState(); return () => state2; }); const state = useSyncExternalStore( store.subscribe, silect ? silentState.current() : store.getState, silect ? silentState.current() : store.getServerState || store.getState, selector, deepEquals ); return [state, store.setState]; }; export { useStore };