|
1 |
| -import { useState, useRef, useLayoutEffect, useCallback } from 'react'; |
| 1 | +import { useState, useRef, useLayoutEffect, useCallback, useMemo } from 'react'; |
2 | 2 |
|
3 | 3 | function getVpWidth () {
|
4 | 4 | return (typeof window != 'undefined') ? Math.max(
|
@@ -53,12 +53,12 @@ function onResize() {
|
53 | 53 |
|
54 | 54 | listeners.forEach(function(listener) {
|
55 | 55 | const params = { vpW: vpWidth, vpH: vpHeight };
|
56 |
| - if(resolvers.has(listener)) { |
| 56 | + |
| 57 | + if(!resolverMap.has(listener)) { |
57 | 58 | listener(params);
|
58 | 59 | }
|
59 | 60 | else {
|
60 |
| - const resolverParams = resolverMap.get(listener); |
61 |
| - const { hasher, prevHash } = resolverParams; |
| 61 | + const { hasher, prevHash } = resolverMap.get(listener); |
62 | 62 | const hash = hasher(params);
|
63 | 63 |
|
64 | 64 | if(hash != prevHash) {
|
@@ -87,17 +87,22 @@ function onResize() {
|
87 | 87 | function useViewportSizes(input) {
|
88 | 88 | const hasCustomHasher = (typeof input == 'function');
|
89 | 89 | const [state, setState] = useState(()=> !hasCustomHasher ?
|
90 |
| - ({ vpW: vpWidth, vpH: vpHeight }) : input({ vpWidth, vpHeight }) |
| 90 | + ({ vpW: vpWidth, vpH: vpHeight }) : |
| 91 | + (input && input({ vpW: vpWidth, vpH:vpHeight })) |
91 | 92 | );
|
92 | 93 | const timeout = useRef(undefined);
|
93 |
| - const listener = useCallback((!input || hasCustomHasher) ? |
94 |
| - state => setState(state) : |
95 |
| - state => { |
96 |
| - if(timeout.current) { clearTimeout(timeout.current) } |
97 |
| - timeout.current = setTimeout(() => setState(state), input); |
| 94 | + const listener = useCallback( |
| 95 | + (!input || hasCustomHasher) ? |
| 96 | + state => setState(state) : |
| 97 | + state => { |
| 98 | + if(timeout.current) { clearTimeout(timeout.current) } |
| 99 | + timeout.current = setTimeout(() => setState(state), input); |
98 | 100 | }, [input]);
|
99 | 101 |
|
100 | 102 | useLayoutEffect(() => {
|
| 103 | + if(hasCustomHasher) { |
| 104 | + resolverMap.set(listener, { hasher: input, prevHash: state.hash }); |
| 105 | + } |
101 | 106 | listeners.add(listener);
|
102 | 107 |
|
103 | 108 | if(window && listeners.size == 1) {
|
|
0 commit comments