Skip to content

Instantly share code, notes, and snippets.

@andrei-cacio
Last active March 28, 2019 17:43
Show Gist options
  • Save andrei-cacio/c54173c36a422f194a808628a0e38430 to your computer and use it in GitHub Desktop.
Save andrei-cacio/c54173c36a422f194a808628a0e38430 to your computer and use it in GitHub Desktop.
Clickoutside updated
import React, { Component, useEffect, useCallback } from "react";
function ClickOutsideH({ children, onClick }) {
const refs = React.Children.map(children, () => React.createRef());
const handleClick = useCallback(e => {
const isOutside = refs.every(ref => {
return !ref.current.contains(e.target);
});
if (isOutside) {
onClick();
}
}, []);
useEffect(() => {
document.addEventListener("click", handleClick);
return function() {
document.removeEventListener("click", handleClick);
};
}, []);
return React.Children.map(children, (element, idx) =>
React.cloneElement(element, { ref: refs[idx] })
);
}
@Zneider
Copy link

Zneider commented Mar 28, 2019

You should add handleClick in the dependency array of useEffect

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment