/
githubmirror
/
material-ui
Обзор
Документация
Войти
/
githubmirror
/
material-ui
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
docs/data/material/components/modal/SpringModal.tsx
94 строки
2 KB
Silviu Alexandru Avram
[backdrop] Remove deprecated props (#47991)
17 мар 2026, 15:15
Не верифицирован
17 мар 2026, 15:15
85bf0ca
Код
Авторство
О чём код?
import * as React from 'react'; import Backdrop from '@mui/material/Backdrop'; import Box from '@mui/material/Box'; import Modal from '@mui/material/Modal'; import Button from '@mui/material/Button'; import Typography from '@mui/material/Typography'; import { useSpring, animated } from '@react-spring/web'; interface FadeProps { children: React.ReactElement<any>; in?: boolean; onClick?: any; onEnter?: (node: HTMLElement, isAppearing: boolean) => void; onExited?: (node: HTMLElement, isAppearing: boolean) => void; ownerState?: any; } const Fade = React.forwardRef<HTMLDivElement, FadeProps>(function Fade(props, ref) { const { children, in: open, onClick, onEnter, onExited, ownerState, ...other } = props; const style = useSpring({ from: { opacity: 0 }, to: { opacity: open ? 1 : 0 }, onStart: () => { if (open && onEnter) { onEnter(null as any, true); } }, onRest: () => { if (!open && onExited) { onExited(null as any, true); } }, }); return ( <animated.div ref={ref} style={style} {...other}> {React.cloneElement(children, { onClick })} </animated.div> ); }); const style = { position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', width: 400, bgcolor: 'background.paper', border: '2px solid #000', boxShadow: 24, p: 4, }; export default function SpringModal() { const [open, setOpen] = React.useState(false); const handleOpen = () => setOpen(true); const handleClose = () => setOpen(false); return ( <div> <Button onClick={handleOpen}>Open modal</Button> <Modal aria-labelledby="spring-modal-title" aria-describedby="spring-modal-description" open={open} onClose={handleClose} closeAfterTransition slots={{ backdrop: Backdrop }} slotProps={{ backdrop: { slots: { transition: Fade } }, }} > <Fade in={open}> <Box sx={style}> <Typography id="spring-modal-title" variant="h6" component="h2"> Text in a modal </Typography> <Typography id="spring-modal-description" sx={{ mt: 2 }}> Duis mollis, est non commodo luctus, nisi erat porttitor ligula. </Typography> </Box> </Fade> </Modal> </div> ); }