Открываю модальное окно по нажатию на кнопку. При рендере модального окна, вешаю слушатель, который при клике за пределы модального окна, закрывает его.
У меня модальное окно не появляется, так как сразу срабатывает функция handleOutsideClick. Но почему она срабатывает, если я назначаю слушатель на клик после того, как уже модальное окно открылось? Почему он реагирует на клик, который был сделал до инициализации данного слушателя?
При добавлении задержки, данная проблема уходит.
import React, { useEffect, useRef } from 'react';
import ItemColor from './ItemColor';
import { useSelector } from 'react-redux';
function ModalColors({onClose,status}) {
const root = useRef();
const {colors} = useSelector((store) => store.timer);
useEffect(() => {
const handleOutsideClick = e => root.current.contains(e.target) || onClose();
document.addEventListener('click', handleOutsideClick);
return () => document.removeEventListener('click', handleOutsideClick);
}, []);
return (
<div className="modalWrapper">
<div className="modalBody" ref={root}>
<h2>Choose a theme</h2>
<hr />
<div className="colors">
{
colors && colors.map((item)=>(
<ItemColor active={item.activeWork} key={item.id} bg={item.color} />
))
}
</div>
</div>
</div>
);
}
export default ModalColors;