UNPKG

useforceupdatefromanywhere

Version:

[![npm version](https://img.shields.io/npm/v/react-forceupdate.svg?style=flat-square)](https://www.npmjs.com/package/force2update?activeTab=versions) [![npm downloads](https://img.shields.io/npm/dm/react-forceupdate.svg?style=flat-square)](https://www.npm

52 lines (43 loc) 1.81 kB
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