jotai
Version:
👻 Primitive and flexible state management for React
18 lines (17 loc) • 741 B
JavaScript
'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;
}