1 | import useCustomEffect from './useCustomEffect';
|
2 | import { dequal } from 'dequal';
|
3 | import useImmediateUpdateEffect from './useImmediateUpdateEffect';
|
4 | import useEventCallback from './useEventCallback';
|
5 | import { useState } from 'react';
|
6 |
|
7 | function isDepsEqual(_ref, _ref2) {
|
8 | var nextElement = _ref[0],
|
9 | nextConfig = _ref[1];
|
10 | var prevElement = _ref2[0],
|
11 | prevConfig = _ref2[1];
|
12 | return nextElement === prevElement && dequal(nextConfig, prevConfig);
|
13 | }
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 | function useMutationObserver(element, config, callback) {
|
37 | var _useState = useState(null),
|
38 | records = _useState[0],
|
39 | setRecords = _useState[1];
|
40 |
|
41 | var handler = useEventCallback(callback || setRecords);
|
42 | useCustomEffect(function () {
|
43 | if (!element) return;
|
44 |
|
45 |
|
46 |
|
47 |
|
48 | var observer = new MutationObserver(handler);
|
49 | observer.observe(element, config);
|
50 | return function () {
|
51 | observer.disconnect();
|
52 | };
|
53 | }, [element, config], {
|
54 | isEqual: isDepsEqual,
|
55 |
|
56 |
|
57 | effectHook: useImmediateUpdateEffect
|
58 | });
|
59 | return callback ? void 0 : records || [];
|
60 | }
|
61 |
|
62 | export default useMutationObserver; |
\ | No newline at end of file |