useforceupdatefromanywhere
Version:
[](https://www.npmjs.com/package/force2update?activeTab=versions) [](https://www.npm
52 lines (43 loc) • 1.81 kB
JavaScript
import React, { useState, useCallback } from 'react';
var useForceUpdate = function useForceUpdate() {
var _useState = useState(Object.create(null)),
force2Update = _useState[1];
var forceUpdate = useCallback(function () {
force2Update(Object.create(null));
}, [force2Update]);
return forceUpdate;
};
var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
var useForceUpdateFromAnywhere = function useForceUpdateFromAnywhere(mainFactory, componentName, cleaningCallBack) {
var _useState2 = useState(Object.create(null)),
force2Update = _useState2[1];
var forceUpdate = useCallback(function () {
force2Update(Object.create(null));
}, [force2Update]);
useEvents(mainFactory, componentName, forceUpdate);
useIsomorphicLayoutEffect(function () {
return function () {
cleaningCallBack && cleaningCallBack();
delete mainFactory.eventsForForceUpdate;
};
}, [mainFactory, componentName]);
};
var useEvents = function useEvents(mainFactory, componentName, forceUpdate) {
if (typeof mainFactory.eventsForForceUpdate === 'undefined') {
mainFactory.eventsForForceUpdate = {};
var trigger = function trigger(cp) {
var handlers = mainFactory.eventsForForceUpdate["on" + cp + "Change"];
if (handlers && typeof handlers === 'function') {
handlers.apply(null, null);
}
};
mainFactory.forceToUpdate = function (cp) {
return trigger(cp);
};
}
if (!Object.prototype.hasOwnProperty.call(mainFactory.eventsForForceUpdate, componentName)) {
mainFactory.eventsForForceUpdate["on" + componentName + "Change"] = forceUpdate;
}
};
export { useEvents, useForceUpdate, useForceUpdateFromAnywhere };
//# sourceMappingURL=useforceupdatefromanywhere.esm.js.map