react-use-event-reducer
Version:
A React hook for reducing state from strongly typed events.
26 lines (25 loc) • 956 B
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.useEventReducer = void 0;
var react_1 = require("react");
function useEventReducer(handlers, initial) {
var reducer = react_1.useCallback(function (state, _a) {
var event = _a.event, payload = _a.payload;
return handlers[event](state, payload);
}, [handlers]);
var _a = react_1.useReducer(reducer, initial), state = _a[0], dispatch = _a[1];
var emit = react_1.useMemo(function () {
var events = Object.keys(handlers);
return events.reduce(function (emitters, event) {
emitters[event] = (function (payload) {
return dispatch({
event: event,
payload: payload,
});
});
return emitters;
}, {});
}, [handlers, dispatch]);
return { state: state, emit: emit };
}
exports.useEventReducer = useEventReducer;
;