extra-react-hooks 0.6.3 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +16 -0
  2. package/lib/index.d.ts +22 -21
  3. package/lib/index.js +22 -21
  4. package/lib/index.js.map +1 -1
  5. package/lib/types.d.ts +3 -3
  6. package/lib/types.js +1 -1
  7. package/lib/use-callback-async.d.ts +2 -2
  8. package/lib/use-callback-async.js +19 -19
  9. package/lib/use-effect-async.d.ts +2 -2
  10. package/lib/use-effect-async.js +19 -19
  11. package/lib/use-finite-state-machine.d.ts +3 -3
  12. package/lib/use-finite-state-machine.js +13 -13
  13. package/lib/use-force-update.d.ts +1 -1
  14. package/lib/use-force-update.js +8 -8
  15. package/lib/use-get-set.d.ts +1 -1
  16. package/lib/use-get-set.js +15 -15
  17. package/lib/use-iife.d.ts +2 -2
  18. package/lib/use-iife.js +20 -20
  19. package/lib/use-increment.d.ts +1 -1
  20. package/lib/use-increment.js +11 -11
  21. package/lib/use-intersection-observer.d.ts +3 -0
  22. package/lib/use-intersection-observer.js +33 -0
  23. package/lib/use-intersection-observer.js.map +1 -0
  24. package/lib/use-is-first-render.d.ts +1 -1
  25. package/lib/use-is-first-render.js +23 -23
  26. package/lib/use-is-mounted.d.ts +1 -1
  27. package/lib/use-is-mounted.js +15 -15
  28. package/lib/use-memo-with-cleanup.d.ts +2 -2
  29. package/lib/use-memo-with-cleanup.js +8 -8
  30. package/lib/use-mount-async.d.ts +1 -1
  31. package/lib/use-mount-async.js +4 -4
  32. package/lib/use-mount.d.ts +2 -2
  33. package/lib/use-mount.js +4 -4
  34. package/lib/use-multiple-selection.d.ts +9 -9
  35. package/lib/use-multiple-selection.js +49 -49
  36. package/lib/use-render-counter.d.ts +1 -1
  37. package/lib/use-render-counter.js +6 -6
  38. package/lib/use-resize-observer.d.ts +2 -2
  39. package/lib/use-resize-observer.js +12 -13
  40. package/lib/use-resize-observer.js.map +1 -1
  41. package/lib/use-single-selection.d.ts +7 -7
  42. package/lib/use-single-selection.js +22 -22
  43. package/lib/use-state-cycle.d.ts +2 -2
  44. package/lib/use-state-cycle.js +15 -15
  45. package/lib/use-step.d.ts +2 -2
  46. package/lib/use-step.js +25 -25
  47. package/lib/use-toggle.d.ts +1 -1
  48. package/lib/use-toggle.js +8 -8
  49. package/lib/use-unmount.d.ts +1 -1
  50. package/lib/use-unmount.js +4 -4
  51. package/lib/use-update-effect.d.ts +2 -2
  52. package/lib/use-update-effect.js +10 -10
  53. package/package.json +1 -1
  54. package/src/index.ts +1 -0
  55. package/src/use-intersection-observer.ts +66 -0
  56. package/src/use-resize-observer.ts +1 -2
  57. package/CHANGELOG.md +0 -234
@@ -1,50 +1,50 @@
1
- import { useState, useMemo, useCallback } from 'react';
2
- import { assert, toArray } from '@blackglory/prelude';
3
- import { useIIFE } from "./use-iife.js";
4
- export function useMultipleSelection(options, defaultSelectedIndexes = []) {
5
- useIIFE(() => {
6
- for (const index of defaultSelectedIndexes) {
7
- assert(index >= 0 && index < options.length, 'The index of parameter defaultSelectedIndexes must be in the range of 0 to values.length');
8
- }
9
- }, [defaultSelectedIndexes]);
10
- const [selectedIndexes, setSelectedIndexes] = useState(new Set(defaultSelectedIndexes));
11
- return {
12
- selectedIndexes: useMemo(() => toArray(selectedIndexes), [selectedIndexes]),
13
- optionStates: useMemo(createOptionStates, [options, selectedIndexes]),
14
- toggle: useCallback(toggle, [selectedIndexes]),
15
- select: useCallback(select, []),
16
- unselect: useCallback(unselect, [])
17
- };
18
- function createOptionStates() {
19
- return options.map((_, index) => {
20
- const selected = isSelected(index);
21
- return { selected };
22
- });
23
- }
24
- function isSelected(index) {
25
- return selectedIndexes.has(index);
26
- }
27
- function toggle(index) {
28
- if (isSelected(index)) {
29
- unselect(index);
30
- }
31
- else {
32
- select(index);
33
- }
34
- }
35
- function select(index) {
36
- setSelectedIndexes(selectedIndexes => {
37
- const result = new Set(selectedIndexes);
38
- result.add(index);
39
- return result;
40
- });
41
- }
42
- function unselect(index) {
43
- setSelectedIndexes(selectedIndexes => {
44
- const result = new Set(selectedIndexes);
45
- result.delete(index);
46
- return result;
47
- });
48
- }
49
- }
1
+ import { useState, useMemo, useCallback } from 'react';
2
+ import { assert, toArray } from '@blackglory/prelude';
3
+ import { useIIFE } from "./use-iife.js";
4
+ export function useMultipleSelection(options, defaultSelectedIndexes = []) {
5
+ useIIFE(() => {
6
+ for (const index of defaultSelectedIndexes) {
7
+ assert(index >= 0 && index < options.length, 'The index of parameter defaultSelectedIndexes must be in the range of 0 to values.length');
8
+ }
9
+ }, [defaultSelectedIndexes]);
10
+ const [selectedIndexes, setSelectedIndexes] = useState(new Set(defaultSelectedIndexes));
11
+ return {
12
+ selectedIndexes: useMemo(() => toArray(selectedIndexes), [selectedIndexes]),
13
+ optionStates: useMemo(createOptionStates, [options, selectedIndexes]),
14
+ toggle: useCallback(toggle, [selectedIndexes]),
15
+ select: useCallback(select, []),
16
+ unselect: useCallback(unselect, [])
17
+ };
18
+ function createOptionStates() {
19
+ return options.map((_, index) => {
20
+ const selected = isSelected(index);
21
+ return { selected };
22
+ });
23
+ }
24
+ function isSelected(index) {
25
+ return selectedIndexes.has(index);
26
+ }
27
+ function toggle(index) {
28
+ if (isSelected(index)) {
29
+ unselect(index);
30
+ }
31
+ else {
32
+ select(index);
33
+ }
34
+ }
35
+ function select(index) {
36
+ setSelectedIndexes(selectedIndexes => {
37
+ const result = new Set(selectedIndexes);
38
+ result.add(index);
39
+ return result;
40
+ });
41
+ }
42
+ function unselect(index) {
43
+ setSelectedIndexes(selectedIndexes => {
44
+ const result = new Set(selectedIndexes);
45
+ result.delete(index);
46
+ return result;
47
+ });
48
+ }
49
+ }
50
50
  //# sourceMappingURL=use-multiple-selection.js.map
@@ -1 +1 @@
1
- export declare function useRenderCounter(): number;
1
+ export declare function useRenderCounter(): number;
@@ -1,7 +1,7 @@
1
- import { useRef } from 'react';
2
- export function useRenderCounter() {
3
- const counter = useRef(0);
4
- counter.current++;
5
- return counter.current;
6
- }
1
+ import { useRef } from 'react';
2
+ export function useRenderCounter() {
3
+ const counter = useRef(0);
4
+ counter.current++;
5
+ return counter.current;
6
+ }
7
7
  //# sourceMappingURL=use-render-counter.js.map
@@ -1,2 +1,2 @@
1
- import { RefObject, MutableRefObject } from 'react';
2
- export declare function useResizeObserver(callback: ResizeObserverCallback, refs: Array<RefObject<HTMLElement> | MutableRefObject<HTMLElement>>): void;
1
+ import { RefObject, MutableRefObject } from 'react';
2
+ export declare function useResizeObserver(callback: ResizeObserverCallback, refs: Array<RefObject<HTMLElement> | MutableRefObject<HTMLElement>>, deps?: React.DependencyList): void;
@@ -1,14 +1,13 @@
1
- import { useEffect } from 'react';
2
- import { isntNull } from '@blackglory/prelude';
3
- export function useResizeObserver(callback, refs) {
4
- const deps = refs.map(x => x.current);
5
- useEffect(() => {
6
- const observer = new ResizeObserver(callback);
7
- refs
8
- .map(x => x.current)
9
- .filter(isntNull)
10
- .forEach(x => observer.observe(x));
11
- return () => observer.disconnect();
12
- }, deps);
13
- }
1
+ import { useEffect } from 'react';
2
+ import { isntNull } from '@blackglory/prelude';
3
+ export function useResizeObserver(callback, refs, deps) {
4
+ useEffect(() => {
5
+ const observer = new ResizeObserver(callback);
6
+ refs
7
+ .map(x => x.current)
8
+ .filter(isntNull)
9
+ .forEach(x => observer.observe(x));
10
+ return () => observer.disconnect();
11
+ }, deps);
12
+ }
14
13
  //# sourceMappingURL=use-resize-observer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-resize-observer.js","sourceRoot":"","sources":["../src/use-resize-observer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA+B,MAAM,OAAO,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,MAAM,UAAU,iBAAiB,CAC/B,QAAgC,EAChC,IAAmE;IAEnE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAErC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAA;QAE7C,IAAI;aACD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACnB,MAAM,CAAC,QAAQ,CAAC;aAChB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;QAEpC,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;IACpC,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC"}
1
+ {"version":3,"file":"use-resize-observer.js","sourceRoot":"","sources":["../src/use-resize-observer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA+B,MAAM,OAAO,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,MAAM,UAAU,iBAAiB,CAC/B,QAAgC,EAChC,IAAmE,EACnE,IAA2B;IAE3B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAA;QAE7C,IAAI;aACD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACnB,MAAM,CAAC,QAAQ,CAAC;aAChB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;QAEpC,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;IACpC,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC"}
@@ -1,7 +1,7 @@
1
- import { NonEmptyArray } from '@blackglory/prelude';
2
- import { IOptionState } from "./types.js";
3
- export declare function useSingleSelection<T>(options: NonEmptyArray<T>, defaultSelectedIndex: number): {
4
- selectedIndex: number;
5
- optionStates: IOptionState[];
6
- select: (index: number) => void;
7
- };
1
+ import { NonEmptyArray } from '@blackglory/prelude';
2
+ import { IOptionState } from "./types.js";
3
+ export declare function useSingleSelection<T>(options: NonEmptyArray<T>, defaultSelectedIndex: number): {
4
+ selectedIndex: number;
5
+ optionStates: IOptionState[];
6
+ select: (index: number) => void;
7
+ };
@@ -1,23 +1,23 @@
1
- import { useState, useMemo, useCallback } from 'react';
2
- import { assert } from '@blackglory/prelude';
3
- import { useIIFE } from "./use-iife.js";
4
- export function useSingleSelection(options, defaultSelectedIndex) {
5
- useIIFE(() => {
6
- assert(defaultSelectedIndex >= 0 && defaultSelectedIndex < options.length, 'The parameter defaultSelectedIndex must be in the range of 0 to values.length');
7
- }, [defaultSelectedIndex]);
8
- const [selectedIndex, setSelectedIndex] = useState(defaultSelectedIndex);
9
- return {
10
- selectedIndex,
11
- optionStates: useMemo(createOptionStates, [options, selectedIndex]),
12
- select: useCallback(select, [])
13
- };
14
- function createOptionStates() {
15
- return options.map((_, index) => ({
16
- selected: index === selectedIndex
17
- }));
18
- }
19
- function select(index) {
20
- setSelectedIndex(index);
21
- }
22
- }
1
+ import { useState, useMemo, useCallback } from 'react';
2
+ import { assert } from '@blackglory/prelude';
3
+ import { useIIFE } from "./use-iife.js";
4
+ export function useSingleSelection(options, defaultSelectedIndex) {
5
+ useIIFE(() => {
6
+ assert(defaultSelectedIndex >= 0 && defaultSelectedIndex < options.length, 'The parameter defaultSelectedIndex must be in the range of 0 to values.length');
7
+ }, [defaultSelectedIndex]);
8
+ const [selectedIndex, setSelectedIndex] = useState(defaultSelectedIndex);
9
+ return {
10
+ selectedIndex,
11
+ optionStates: useMemo(createOptionStates, [options, selectedIndex]),
12
+ select: useCallback(select, [])
13
+ };
14
+ function createOptionStates() {
15
+ return options.map((_, index) => ({
16
+ selected: index === selectedIndex
17
+ }));
18
+ }
19
+ function select(index) {
20
+ setSelectedIndex(index);
21
+ }
22
+ }
23
23
  //# sourceMappingURL=use-single-selection.js.map
@@ -1,2 +1,2 @@
1
- import { NonEmptyArray } from '@blackglory/prelude';
2
- export declare function useStateCycle<T>(orderedStates: NonEmptyArray<T>, initialStateIndex?: number): [state: T, next: () => void];
1
+ import { NonEmptyArray } from '@blackglory/prelude';
2
+ export declare function useStateCycle<T>(orderedStates: NonEmptyArray<T>, initialStateIndex?: number): [state: T, next: () => void];
@@ -1,16 +1,16 @@
1
- import { useState, useCallback } from 'react';
2
- export function useStateCycle(orderedStates, initialStateIndex = 0) {
3
- const [index, setIndex] = useState(initialStateIndex);
4
- return [orderedStates[index], useCallback(next, [orderedStates])];
5
- function next() {
6
- setIndex(index => {
7
- if (index + 1 < orderedStates.length) {
8
- return index + 1;
9
- }
10
- else {
11
- return 0;
12
- }
13
- });
14
- }
15
- }
1
+ import { useState, useCallback } from 'react';
2
+ export function useStateCycle(orderedStates, initialStateIndex = 0) {
3
+ const [index, setIndex] = useState(initialStateIndex);
4
+ return [orderedStates[index], useCallback(next, [orderedStates])];
5
+ function next() {
6
+ setIndex(index => {
7
+ if (index + 1 < orderedStates.length) {
8
+ return index + 1;
9
+ }
10
+ else {
11
+ return 0;
12
+ }
13
+ });
14
+ }
15
+ }
16
16
  //# sourceMappingURL=use-state-cycle.js.map
package/lib/use-step.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { NonEmptyArray } from '@blackglory/prelude';
2
- export declare function useStep<T>(steps: NonEmptyArray<T>, initialStepIndex?: number): [currentStep: T, next: () => void, previous: () => void];
1
+ import { NonEmptyArray } from '@blackglory/prelude';
2
+ export declare function useStep<T>(steps: NonEmptyArray<T>, initialStepIndex?: number): [currentStep: T, next: () => void, previous: () => void];
package/lib/use-step.js CHANGED
@@ -1,26 +1,26 @@
1
- import { useState, useCallback } from 'react';
2
- export function useStep(steps, initialStepIndex = 0) {
3
- const [index, setIndex] = useState(initialStepIndex);
4
- return [steps[index], useCallback(next, [steps]), useCallback(previous, [])];
5
- function next() {
6
- setIndex(index => {
7
- if (index === steps.length - 1) {
8
- return index;
9
- }
10
- else {
11
- return index + 1;
12
- }
13
- });
14
- }
15
- function previous() {
16
- setIndex(index => {
17
- if (index === 0) {
18
- return index;
19
- }
20
- else {
21
- return index - 1;
22
- }
23
- });
24
- }
25
- }
1
+ import { useState, useCallback } from 'react';
2
+ export function useStep(steps, initialStepIndex = 0) {
3
+ const [index, setIndex] = useState(initialStepIndex);
4
+ return [steps[index], useCallback(next, [steps]), useCallback(previous, [])];
5
+ function next() {
6
+ setIndex(index => {
7
+ if (index === steps.length - 1) {
8
+ return index;
9
+ }
10
+ else {
11
+ return index + 1;
12
+ }
13
+ });
14
+ }
15
+ function previous() {
16
+ setIndex(index => {
17
+ if (index === 0) {
18
+ return index;
19
+ }
20
+ else {
21
+ return index - 1;
22
+ }
23
+ });
24
+ }
25
+ }
26
26
  //# sourceMappingURL=use-step.js.map
@@ -1 +1 @@
1
- export declare function useToggle(initialState?: boolean): [on: boolean, toggle: () => void];
1
+ export declare function useToggle(initialState?: boolean): [on: boolean, toggle: () => void];
package/lib/use-toggle.js CHANGED
@@ -1,9 +1,9 @@
1
- import { useState, useCallback } from 'react';
2
- export function useToggle(initialState = false) {
3
- const [state, setState] = useState(initialState);
4
- return [state, useCallback(toggle, [])];
5
- function toggle() {
6
- setState(state => !state);
7
- }
8
- }
1
+ import { useState, useCallback } from 'react';
2
+ export function useToggle(initialState = false) {
3
+ const [state, setState] = useState(initialState);
4
+ return [state, useCallback(toggle, [])];
5
+ function toggle() {
6
+ setState(state => !state);
7
+ }
8
+ }
9
9
  //# sourceMappingURL=use-toggle.js.map
@@ -1 +1 @@
1
- export declare function useUnmount(effect: () => void): void;
1
+ export declare function useUnmount(effect: () => void): void;
@@ -1,5 +1,5 @@
1
- import { useEffect } from 'react';
2
- export function useUnmount(effect) {
3
- useEffect(() => effect, []);
4
- }
1
+ import { useEffect } from 'react';
2
+ export function useUnmount(effect) {
3
+ useEffect(() => effect, []);
4
+ }
5
5
  //# sourceMappingURL=use-unmount.js.map
@@ -1,2 +1,2 @@
1
- import { EffectCallback } from 'react';
2
- export declare function useUpdateEffect(effect: EffectCallback, deps?: React.DependencyList): void;
1
+ import { EffectCallback } from 'react';
2
+ export declare function useUpdateEffect(effect: EffectCallback, deps?: React.DependencyList): void;
@@ -1,11 +1,11 @@
1
- import { useEffect } from 'react';
2
- import { useIsFirstRender } from './use-is-first-render.js';
3
- export function useUpdateEffect(effect, deps) {
4
- const isFirstRender = useIsFirstRender();
5
- useEffect(() => {
6
- if (!isFirstRender()) {
7
- return effect();
8
- }
9
- }, deps);
10
- }
1
+ import { useEffect } from 'react';
2
+ import { useIsFirstRender } from './use-is-first-render.js';
3
+ export function useUpdateEffect(effect, deps) {
4
+ const isFirstRender = useIsFirstRender();
5
+ useEffect(() => {
6
+ if (!isFirstRender()) {
7
+ return effect();
8
+ }
9
+ }, deps);
10
+ }
11
11
  //# sourceMappingURL=use-update-effect.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "extra-react-hooks",
3
- "version": "0.6.3",
3
+ "version": "0.6.5",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "files": [
package/src/index.ts CHANGED
@@ -13,6 +13,7 @@ export * from './use-multiple-selection.js'
13
13
  export * from './use-state-cycle.js'
14
14
  export * from './use-toggle.js'
15
15
  export * from './use-resize-observer.js'
16
+ export * from './use-intersection-observer.js'
16
17
  export * from './use-step.js'
17
18
  export * from './use-force-update.js'
18
19
  export * from './use-finite-state-machine.js'
@@ -0,0 +1,66 @@
1
+ import { useEffect, RefObject, MutableRefObject } from 'react'
2
+ import { assert, isArray, isntNull } from '@blackglory/prelude'
3
+
4
+ export function useIntersectionObserver(
5
+ callback: IntersectionObserverCallback
6
+ , options: IntersectionObserverInit | undefined
7
+ , refs: Array<RefObject<HTMLElement> | MutableRefObject<HTMLElement>>
8
+ , deps?: React.DependencyList
9
+ ): void
10
+ export function useIntersectionObserver(
11
+ callback: IntersectionObserverCallback
12
+ , refs: Array<RefObject<HTMLElement> | MutableRefObject<HTMLElement>>
13
+ , deps?: React.DependencyList
14
+ ): void
15
+ export function useIntersectionObserver(...args:
16
+ | [
17
+ callback: IntersectionObserverCallback
18
+ , options: IntersectionObserverInit | undefined
19
+ , refs: Array<RefObject<HTMLElement> | MutableRefObject<HTMLElement>>
20
+ , deps?: React.DependencyList
21
+ ]
22
+ | [
23
+ callback: IntersectionObserverCallback
24
+ , refs: Array<RefObject<HTMLElement> | MutableRefObject<HTMLElement>>
25
+ , deps?: React.DependencyList
26
+ ]
27
+ ): void {
28
+ switch (args.length) {
29
+ case 2: {
30
+ const [callback, refs] = args
31
+
32
+ // eslint-disable-next-line react-hooks/rules-of-hooks
33
+ return useIntersectionObserver(callback, undefined, refs)
34
+ }
35
+ case 3: {
36
+ const [callback, optionsOrRefs, refsOrDeps] = args
37
+ if (isArray(optionsOrRefs)) {
38
+ const refs = optionsOrRefs
39
+ const deps = refsOrDeps as React.DependencyList | undefined
40
+
41
+ // eslint-disable-next-line react-hooks/rules-of-hooks
42
+ return useIntersectionObserver(callback, undefined, refs, deps)
43
+ } else {
44
+ const options = optionsOrRefs
45
+ const refs = refsOrDeps as Array<RefObject<HTMLElement> | MutableRefObject<HTMLElement>>
46
+
47
+ // eslint-disable-next-line react-hooks/rules-of-hooks
48
+ return useIntersectionObserver(callback, options, refs)
49
+ }
50
+ }
51
+ }
52
+
53
+ const [callback, options, refs, deps] = args
54
+
55
+ // eslint-disable-next-line react-hooks/rules-of-hooks
56
+ useEffect(() => {
57
+ const observer = new IntersectionObserver(callback, options)
58
+
59
+ refs
60
+ .map(x => x.current)
61
+ .filter(isntNull)
62
+ .forEach(x => observer.observe(x))
63
+
64
+ return () => observer.disconnect()
65
+ }, deps)
66
+ }
@@ -4,9 +4,8 @@ import { isntNull } from '@blackglory/prelude'
4
4
  export function useResizeObserver(
5
5
  callback: ResizeObserverCallback
6
6
  , refs: Array<RefObject<HTMLElement> | MutableRefObject<HTMLElement>>
7
+ , deps?: React.DependencyList
7
8
  ): void {
8
- const deps = refs.map(x => x.current)
9
-
10
9
  useEffect(() => {
11
10
  const observer = new ResizeObserver(callback)
12
11