I created a hook for detecting an outside click of a component:
export const useDetectOuterClick = () => {
const ref = useRef(null);
const [visible, setVisible] = useState(false);
const outerClickHandler = (event) => {
if (ref.current && !ref.current.contains(event.target)) {
setVisible(false);
}
}
useEffect(() => {
document.addEventListener('mousedown', (e) => outerClickHandler(e), true);
return () => {
document.addEventListener('mousedown', (e) => outerClickHandler(e), true);
}
}, [ref]);
return { visible, setVisible, ref };
}
I want to include in that hook several elements not just one, meaning detecting click outside of eather one of them.
I have tried to add another ref:
export const useDetectOuterClick = () => {
const ref = useRef(null);
const ref2 = useRef(null);
const [visible, setVisible] = useState(false);
const outerClickHandler = (event) => {
if (ref.current && !ref.current.contains(event.target) && !ref2.current.contains(event.target)) {
setVisible(false);
}
}
useEffect(() => {
document.addEventListener('mousedown', (e) => outerClickHandler(e), true);
return () => {
document.addEventListener('mousedown', (e) => outerClickHandler(e), true);
}
}, [ref, ref2]);
return { visible, setVisible, ref, ref2 };
}
But it does not work! help please ?