UNPKG

jotai

Version:

👻 Primitive and flexible state management for React

18 lines (17 loc) • 741 B
'use client'; import { useCallback, useDebugValue, useSyncExternalStore } from 'react'; import { createContinuablePromise, isPromiseLike, } from './continuablePromise.js'; import { useStore } from './Provider.js'; export function useAtomValueRawSync(atom, options) { const store = useStore(options); const getSnapshot = useCallback(() => { const value = store.get(atom); if (isPromiseLike(value)) { return createContinuablePromise(store, value, () => store.get(atom)); } return value; }, [store, atom]); const value = useSyncExternalStore(useCallback((callback) => store.sub(atom, callback), [store, atom]), getSnapshot, getSnapshot); useDebugValue(value); return value; }