UNPKG

@ccs-design/rc-pro

Version:

ccs design basic react component

86 lines (64 loc) 2.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useEvent; exports.EventInstance = void 0; var _react = require("react"); var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep")); var _uniqueId2 = _interopRequireDefault(require("lodash/uniqueId")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var EventInstance = function EventInstance() { var _this = this; _classCallCheck(this, EventInstance); this.subscriptions = []; this.emit = function (val, actionType) { _this.subscriptions.forEach(function (subscription) { // 未传入actionType 全部执行 if (actionType === undefined) { var values = (0, _cloneDeep2.default)(val); subscription.record = values; subscription.func(values); return; } // 仅执行匹配的方法 if (actionType === subscription.type) { var _values = (0, _cloneDeep2.default)(val); subscription.record = _values; subscription.func(_values); } }); }; this.useSubscription = function (callback, actionType) { var _this$subscriptions$f; // eslint-disable-next-line react-hooks/rules-of-hooks var callbackRef = (0, _react.useRef)((0, _uniqueId2.default)("_Subscription")); // eslint-disable-next-line react-hooks/rules-of-hooks (0, _react.useEffect)(function () { _this.subscriptions.push({ id: callbackRef.current, func: callback, type: actionType }); return function () { _this.subscriptions = _this.subscriptions.filter(function (sub) { return sub.id !== callbackRef.current; }); }; }, []); return ((_this$subscriptions$f = _this.subscriptions.find(function (s) { return s.id === callbackRef.current; })) === null || _this$subscriptions$f === void 0 ? void 0 : _this$subscriptions$f.record) || {}; }; }; /** * 组件消息订阅方式传值 * @returns */ exports.EventInstance = EventInstance; function useEvent() { var ref = (0, _react.useRef)(); if (!ref.current) { ref.current = new EventInstance(); } return ref.current; }