Я пытаюсь реализовать модальный модуль, используя базовый модальный компонент MUI и модули scss для стилизации:
import { Modal as BaseModal, ModalProps as BaseModalProps } from '@mui/base';
const Backdrop = () => <div onClick = {(event) => console.info(event)} className = {classes.backdrop}></div>;
const MyModal = (...) => {
<BaseModal
className = {`${classes.modal} ${className}`}
open = {open} // prop from parent component
onClose = {(event, reason) => {
console.info('inside modal onClose')
console.info('event: ', event)
console.info('reason: ', reason)
console.info('calling onClose prop now...')
onClose() // prop from parent component
}}
slots = {{ backdrop: Backdrop }}
{...other}
>
...
</BaseModal>
}
Когда я нажимаю esc, onClose срабатывает с ожидаемой причиной (onClose docs ). Но когда я нажимаю на фон, ничего не происходит. Раньше я работал над этим с помощью ClickAwayListener , но все базовые модальные демо-версии MUI имеют функционирующие фоны без необходимости ClickAwayListener.
Есть мысли по поводу возможных несоответствий?





вы перенаправитеRef на задний план...
const Backdrop = React.forwardRef<
HTMLDivElement,
{ open?: boolean; className: string }
>((props, ref) => {
const { open, className, ...other } = props;
return (
<div
className = {clsx({ 'base-Backdrop-open': open }, className)}
ref = {ref}
{...other}
/>
);
});
думаю, здесь вы сможете найти все ответы: mui.com/base-ui/react-modal
это сработало, и я вижу, что это отражает демо здесь. Из любопытства, что дает передача ссылки на фон? Почему мне не нужно поддерживать ссылку в родительском модальном компоненте?