useMutateObserver.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. "use strict";
  2. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
  3. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  4. Object.defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports.default = useMutateObserver;
  8. var _canUseDom = _interopRequireDefault(require("rc-util/lib/Dom/canUseDom"));
  9. var React = _interopRequireWildcard(require("react"));
  10. var defaultOptions = {
  11. subtree: true,
  12. childList: true,
  13. attributeFilter: ['style', 'class']
  14. };
  15. function useMutateObserver(nodeOrList, callback) {
  16. var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultOptions;
  17. React.useEffect(function () {
  18. if (!(0, _canUseDom.default)() || !nodeOrList) {
  19. return;
  20. }
  21. var instance;
  22. var nodeList = Array.isArray(nodeOrList) ? nodeOrList : [nodeOrList];
  23. if ('MutationObserver' in window) {
  24. instance = new MutationObserver(callback);
  25. nodeList.forEach(function (element) {
  26. instance.observe(element, options);
  27. });
  28. }
  29. return function () {
  30. var _instance, _instance2;
  31. (_instance = instance) === null || _instance === void 0 ? void 0 : _instance.takeRecords();
  32. (_instance2 = instance) === null || _instance2 === void 0 ? void 0 : _instance2.disconnect();
  33. };
  34. }, [options, nodeOrList]);
  35. }