UNPKG

@raulpesilva/re-state

Version:

easy way to create a shared state to the entire application

27 lines (24 loc) 853 B
import { useDebugValue, useState } from 'react'; import { shallowEqual } from './utils'; import { store } from './store'; import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'; export function useReStateSelector(selector, isEquals) { if (isEquals === void 0) { isEquals = shallowEqual; } var _useState = useState(store.getMany(selector)), selectorValue = _useState[0], setSelectorValue = _useState[1]; useDebugValue(selectorValue); useIsomorphicLayoutEffect(function () { var unSub = store.subscribeSelector(function (prevStore, newStore) { var prevSelection = selector(prevStore); var newSelection = selector(newStore); if (!isEquals(prevSelection, newSelection)) { setSelectorValue(newSelection); } }); return unSub; }, [selector]); return selectorValue; }