Skip to content

Commit 884262e

Browse files
committed
fix a few bugs discovered testing beta version, update readme and bump beta version
1 parent d34e81c commit 884262e

File tree

4 files changed

+20
-14
lines changed

4 files changed

+20
-14
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ npm install -D use-viewport-sizes
1111
```
1212

1313
## Benefits ##
14-
- extremely lightweight and dependency-free -- **3.7kb** without/before gzipping.
14+
- extremely lightweight and dependency-free -- **3.75kb** without/before gzipping.
1515
- only one `window.onresize` handler used to subscribe to any changes in an unlimited number of components as well despite several different paradigms that pull from this.
1616
- optional debounce to delay updates until user stops dragging their window for a moment; this can make expensive components with size-dependent calculations run much faster and your app feel smoother.
1717
- debouncing does not create new handlers or waste re-renders in your component; the results are also pooled from only one resize result.
18-
- supports SSR.
18+
- optional hash function to update component subtree only at points you would like to.
19+
- supports SSR (see example under Usage section).
1920

2021

2122
## Usage ##

build/index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "use-viewport-sizes",
3-
"version": "0.2.8-beta.0",
3+
"version": "0.2.8-beta.9",
44
"description": "tiny React hook for tracking visible window viewport size in your components w/ an optional debounce for optimal rendering.",
55
"main": "build/index.js",
66
"scripts": {

src/index.js

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState, useRef, useLayoutEffect, useCallback } from 'react';
1+
import { useState, useRef, useLayoutEffect, useCallback, useMemo } from 'react';
22

33
function getVpWidth () {
44
return (typeof window != 'undefined') ? Math.max(
@@ -53,12 +53,12 @@ function onResize() {
5353

5454
listeners.forEach(function(listener) {
5555
const params = { vpW: vpWidth, vpH: vpHeight };
56-
if(resolvers.has(listener)) {
56+
57+
if(!resolverMap.has(listener)) {
5758
listener(params);
5859
}
5960
else {
60-
const resolverParams = resolverMap.get(listener);
61-
const { hasher, prevHash } = resolverParams;
61+
const { hasher, prevHash } = resolverMap.get(listener);
6262
const hash = hasher(params);
6363

6464
if(hash != prevHash) {
@@ -87,17 +87,22 @@ function onResize() {
8787
function useViewportSizes(input) {
8888
const hasCustomHasher = (typeof input == 'function');
8989
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 }))
9192
);
9293
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);
98100
}, [input]);
99101

100102
useLayoutEffect(() => {
103+
if(hasCustomHasher) {
104+
resolverMap.set(listener, { hasher: input, prevHash: state.hash });
105+
}
101106
listeners.add(listener);
102107

103108
if(window && listeners.size == 1) {

0 commit comments

Comments
 (0)