react-entities
Version:
React Entities - the simplest app state management for React
36 lines (32 loc) • 1.11 kB
JavaScript
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;