Skip to content

Commit 69d5563

Browse files
committed
fix: handle invalid input, update test
1 parent 8156a21 commit 69d5563

File tree

3 files changed

+45
-32
lines changed

3 files changed

+45
-32
lines changed

example.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ function App() {
1212
<div style={{ width: '100%', height: '100%' }}>
1313
<pre>{JSON.stringify({ width, height })}</pre>
1414
<button onClick={() => setFullWidth(!fullWidth)}>Toggle Size</button>
15-
<div ref={ref} style={{ width: fullWidth ? '100%' : '50%', height: '50%' }}>
15+
<div
16+
ref={ref}
17+
style={{ width: fullWidth ? '100%' : '50%', height: '50%' }}
18+
>
1619
<img src={imgUrl} width={width} height={height} />
1720
</div>
1821
</div>

index.js

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ let { useCallback, useState, useLayoutEffect } = require('react')
33

44
function getSize(el) {
55
if (!el) {
6-
return {}
6+
return {
7+
width: 0,
8+
height: 0
9+
}
710
}
811

912
return {
@@ -13,7 +16,9 @@ function getSize(el) {
1316
}
1417

1518
function useComponentSize(ref) {
16-
let [ComponentSize, setComponentSize] = useState(getSize(ref.current))
19+
let [ComponentSize, setComponentSize] = useState(
20+
getSize(ref ? ref.current : {})
21+
)
1722

1823
const handleResize = useCallback(
1924
function handleResize() {
@@ -24,28 +29,32 @@ function useComponentSize(ref) {
2429
[ref]
2530
)
2631

27-
useLayoutEffect(() => {
28-
if (!ref.current) { return }
32+
useLayoutEffect(
33+
() => {
34+
if (!ref.current) {
35+
return
36+
}
2937

30-
handleResize()
38+
handleResize()
3139

32-
if (typeof ResizeObserver === 'function') {
33-
let resizeObserver = new ResizeObserver(() => handleResize())
34-
resizeObserver.observe(ref.current)
40+
if (typeof ResizeObserver === 'function') {
41+
let resizeObserver = new ResizeObserver(() => handleResize())
42+
resizeObserver.observe(ref.current)
3543

36-
return () => {
37-
resizeObserver.disconnect(ref.current)
38-
resizeObserver = null
39-
}
40-
} else {
41-
window.addEventListener('resize', handleResize)
42-
43-
return () => {
44-
window.removeEventListener('resize', handleResize)
44+
return () => {
45+
resizeObserver.disconnect(ref.current)
46+
resizeObserver = null
47+
}
48+
} else {
49+
window.addEventListener('resize', handleResize)
50+
51+
return () => {
52+
window.removeEventListener('resize', handleResize)
53+
}
4554
}
46-
}
47-
48-
}, [ref.current])
55+
},
56+
[ref.current]
57+
)
4958

5059
return ComponentSize
5160
}

test.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
1-
'use strict';
2-
let test = require('ava');
3-
let { createElement: h } = require('react');
4-
let ReactTestRenderer = require('react-test-renderer');
5-
let useInputValue = require('./');
1+
'use strict'
2+
let test = require('ava')
3+
let { createElement: h } = require('react')
4+
let ReactTestRenderer = require('react-test-renderer')
5+
let useComponentSize = require('./')
66

77
function render(val) {
8-
return ReactTestRenderer.create(val);
8+
return ReactTestRenderer.create(val)
99
}
1010

1111
test(t => {
1212
function Component() {
13-
let value = use...();
14-
return h('div');
13+
let size = useComponentSize({})
14+
return h('div', size)
1515
}
1616

17-
let input = render(h(Component));
17+
let input = render(h(Component))
1818

19-
t.is(input.toJSON().props.value, '...');
20-
});
19+
t.is(input.toJSON().props.width, 0)
20+
t.is(input.toJSON().props.height, 0)
21+
})

0 commit comments

Comments
 (0)