UNPKG

react-entities

Version:

React Entities - the simplest app state management for React

36 lines (32 loc) 1.11 kB
import { useState, useCallback, useEffect } from 'react'; import { selectAll, strictEqual } from './utils'; export var useUnscopedEntity = function useUnscopedEntity(entity, selector, equalityFn) { if (selector === void 0) { selector = selectAll; } if (equalityFn === void 0) { equalityFn = strictEqual; } var selected = selector(entity.state); var _useState = useState(selected), state = _useState[0], setState = _useState[1]; var subscriberFn = useCallback(function (newState) { var newSelected = selector(newState); var hasChanged = !equalityFn(state, newSelected); if (hasChanged) setState(newSelected); }, [selector, equalityFn, state]); useEffect(function () { entity.subscribers.push(subscriberFn); return function () { for (var i = 0, c = entity.subscribers.length; i < c; i++) { if (entity.subscribers[i] === subscriberFn) { entity.subscribers[i] = null; break; } } }; }, [subscriberFn, entity.subscribers]); return [selected, entity.actions]; }; export default useUnscopedEntity;