UNPKG

react-entities

Version:

React Entities - the simplest app state management for React

46 lines (37 loc) 1.29 kB
"use strict"; exports.__esModule = true; exports["default"] = exports.useUnscopedEntity = void 0; var _react = require("react"); var _utils = require("./utils"); var useUnscopedEntity = function useUnscopedEntity(entity, selector, equalityFn) { if (selector === void 0) { selector = _utils.selectAll; } if (equalityFn === void 0) { equalityFn = _utils.strictEqual; } var selected = selector(entity.state); var _useState = (0, _react.useState)(selected), state = _useState[0], setState = _useState[1]; var subscriberFn = (0, _react.useCallback)(function (newState) { var newSelected = selector(newState); var hasChanged = !equalityFn(state, newSelected); if (hasChanged) setState(newSelected); }, [selector, equalityFn, state]); (0, _react.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]; }; exports.useUnscopedEntity = useUnscopedEntity; var _default = useUnscopedEntity; exports["default"] = _default;