UNPKG

zustand

Version:

🐻 Bear necessities for state management in React

27 lines (24 loc) 1.09 kB
import React from 'react'; import useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js'; import { createStore } from 'zustand/vanilla'; const { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports; const identity = (arg) => arg; function useStoreWithEqualityFn(api, selector = identity, equalityFn) { const slice = useSyncExternalStoreWithSelector( api.subscribe, api.getState, api.getInitialState, selector, equalityFn ); React.useDebugValue(slice); return slice; } const createWithEqualityFnImpl = (createState, defaultEqualityFn) => { const api = createStore(createState); const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn); Object.assign(useBoundStoreWithEqualityFn, api); return useBoundStoreWithEqualityFn; }; const createWithEqualityFn = (createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl; export { createWithEqualityFn, useStoreWithEqualityFn };