Skip to content

Commit b8de12e

Browse files
committed
add once to options, don’t use memo
1 parent b3470f7 commit b8de12e

File tree

1 file changed

+21
-20
lines changed

1 file changed

+21
-20
lines changed

src/index.js

+21-20
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,32 @@
1-
import { useRef, useEffect, useMemo } from 'react';
1+
/* eslint-disable max-params */
2+
import { useRef, useEffect } from 'react';
23

3-
const useEventListener = (eventName, handler, element = global, options) => {
4+
const useEventListener = (
5+
eventName,
6+
handler,
7+
element = global,
8+
options = {}
9+
) => {
410
const savedHandler = useRef();
11+
const { capture, passive, once } = options;
512

613
useEffect(() => {
714
savedHandler.current = handler;
815
}, [handler]);
916

10-
const capture = options ? options.capture : undefined;
11-
const passive = options ? options.passive : undefined;
12-
13-
// Rerun the effect only if capture or passive has actually changed
14-
const memoOptions = useMemo(() => ({ capture, passive }), [capture, passive]);
15-
16-
useEffect(
17-
() => {
18-
const isSupported = element && element.addEventListener;
19-
if (!isSupported) return;
17+
useEffect(() => {
18+
const isSupported = element && element.addEventListener;
19+
if (!isSupported) {
20+
return;
21+
}
2022

21-
const eventListener = event => savedHandler.current(event);
22-
element.addEventListener(eventName, eventListener, memoOptions);
23-
return () => {
24-
element.removeEventListener(eventName, eventListener, memoOptions);
25-
};
26-
},
27-
[eventName, element, memoOptions]
28-
);
23+
const eventListener = (event) => savedHandler.current(event);
24+
const opts = { capture, passive, once };
25+
element.addEventListener(eventName, eventListener, opts);
26+
return () => {
27+
element.removeEventListener(eventName, eventListener, opts);
28+
};
29+
}, [eventName, element, capture, passive, once]);
2930
};
3031

3132
export default useEventListener;

0 commit comments

Comments
 (0)