useSingletonCache.js 971 B

12345678910111213141516171819202122232425
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  3. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
  4. Object.defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.default = useSingletonCache;
  8. var React = _interopRequireWildcard(require("react"));
  9. var _isEqual = _interopRequireDefault(require("rc-util/lib/isEqual"));
  10. /**
  11. * Singleton cache will only take latest `cacheParams` as key
  12. * and return the result for callback matching.
  13. */
  14. function useSingletonCache() {
  15. const cacheRef = React.useRef([null, null]);
  16. const getCache = (cacheKeys, callback) => {
  17. const filteredKeys = cacheKeys.map(item => item instanceof HTMLElement || Number.isNaN(item) ? '' : item);
  18. if (!(0, _isEqual.default)(cacheRef.current[0], filteredKeys)) {
  19. cacheRef.current = [filteredKeys, callback()];
  20. }
  21. return cacheRef.current[1];
  22. };
  23. return getCache;
  24. }