useEffectCleanupRegister.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  2. import { warning } from "rc-util/es/warning";
  3. import * as React from 'react';
  4. var fullClone = _objectSpread({}, React);
  5. var useInsertionEffect = fullClone.useInsertionEffect;
  6. // DO NOT register functions in useEffect cleanup function, or functions that registered will never be called.
  7. var useCleanupRegister = function useCleanupRegister(deps) {
  8. var effectCleanups = [];
  9. var cleanupFlag = false;
  10. function register(fn) {
  11. if (cleanupFlag) {
  12. if (process.env.NODE_ENV !== 'production') {
  13. warning(false, '[Ant Design CSS-in-JS] You are registering a cleanup function after unmount, which will not have any effect.');
  14. }
  15. return;
  16. }
  17. effectCleanups.push(fn);
  18. }
  19. React.useEffect(function () {
  20. // Compatible with strict mode
  21. cleanupFlag = false;
  22. return function () {
  23. cleanupFlag = true;
  24. if (effectCleanups.length) {
  25. effectCleanups.forEach(function (fn) {
  26. return fn();
  27. });
  28. }
  29. };
  30. }, deps);
  31. return register;
  32. };
  33. var useRun = function useRun() {
  34. return function (fn) {
  35. fn();
  36. };
  37. };
  38. // Only enable register in React 18
  39. var useEffectCleanupRegister = typeof useInsertionEffect !== 'undefined' ? useCleanupRegister : useRun;
  40. export default useEffectCleanupRegister;