БО
Size: a a a
БО
VB
БО
VB
А
БО
IN
VB
as
const [isOpened, toggleIsOpened] = React.useState(false);
const pickerWrapper = React.useRef<HTMLDivElement>(null);
const closePicker = React.useCallback((event: any) => {
if (
!pickerWrapper.current ||
pickerWrapper.current.contains(event.target)
) {
return;
}
toggleIsOpened(false);
document.removeEventListener("mousedown", closePicker);
}, []);
React.useEffect(() => {
return () => {
toggleIsOpened(false);
document.removeEventListener("mousedown", closePicker);
};
}, [closePicker]);
const toggleIsOpenedPicker = () => {
if (!isOpened) {
document.addEventListener("mousedown", closePicker);
}
toggleIsOpened(!isOpened);
};
return <div className="challenge-picker" ref={pickerWrapper}></div>;
А
А
as
export const useOnClickOutside = (
ref: React.MutableRefObject<any>,
handler: (event?: MouseEvent | TouchEvent) => void
) => {
React.useEffect(() => {
const listener = (event: MouseEvent | TouchEvent) => {
// Do nothing if clicking ref's element or descendent elements
if (!ref.current || ref.current.contains(event.target)) {
return;
}
handler(event);
};
document.addEventListener("mousedown", listener);
document.addEventListener("touchstart", listener);
return () => {
document.removeEventListener("mousedown", listener);
document.removeEventListener("touchstart", listener);
};
}, [ref, handler]);
};
{flag && <Component />}
А
VK
А
as
export const useOnClickOutside = (
ref: React.MutableRefObject<any>,
handler: (event?: MouseEvent | TouchEvent) => void
) => {
React.useEffect(() => {
const listener = (event: MouseEvent | TouchEvent) => {
// Do nothing if clicking ref's element or descendent elements
if (!ref.current || ref.current.contains(event.target)) {
return;
}
handler(event);
};
document.addEventListener("mousedown", listener);
document.addEventListener("touchstart", listener);
return () => {
document.removeEventListener("mousedown", listener);
document.removeEventListener("touchstart", listener);
};
}, [ref, handler]);
};
{flag && <Component />}
АБ
AK
MB
MB