В библиотеке MUI (Material-UI) для React существует несколько
подходов к реализации задержки появления компонентов,
что позволяет создавать плавные анимации, улучшать UX и оптимизировать
рендеринг. Основной инструмент для этого — компонент Fade,
но также применяются Grow, Collapse и
Slide.
FadeКомпонент Fade используется для плавного проявления и
исчезновения дочернего элемента. Его ключевое свойство —
in, которое управляет видимостью компонента.
import React, { useState } from 'react';
import { Fade, Button } from '@mui/material';
function FadeExample() {
const [visible, setVisible] = useState(false);
return (
<>
<Button onCl ick={() => setVisible(prev => !prev)}>Toggle Fade</Button>
<Fade in={visible} timeout={1000}>
<div style={{ width: 200, height: 100, backgroundColor: 'skyblue' }}>Пример Fade</div>
</Fade>
</>
);
}
Ключевые моменты:
timeout определяет длительность анимации в
миллисекундах.in={true} инициирует появление, in={false}
— исчезновение.setTimeout перед изменением состояния.timeoutMUI позволяет задавать отдельные значения для появления и исчезновения:
<Fade
in={visible}
timeout={{ enter: 500, exit: 1500 }}
>
<div>Задержка появления и скрытия</div>
</Fade>
enter — длительность анимации появления.exit — длительность анимации исчезновения.TransitionPropsДля более точного контроля можно передавать объект
TransitionProps. Он поддерживает onEnter,
onEntered, onExit, onExited для
отслеживания этапов анимации.
<Fade
in={visible}
timeout={1000}
TransitionProps={{
onEnter: () => console.log('Начало появления'),
onEntered: () => console.log('Появление завершено'),
}}
>
<div>Контролируемая анимация</div>
</Fade>
Это позволяет запускать дополнительные действия в момент появления или исчезновения компонента, например, подгрузку данных или изменение состояния родителя.
GrowGrow похож на Fade, но добавляет эффект
масштабирования при появлении:
import { Grow } from '@mui/material';
<Grow in={visible} timeout={800}>
<div>Появление с масштабированием</div>
</Grow>
CollapseCollapse управляет развертыванием по
высоте:
import { Collapse } from '@mui/material';
<Collapse in={visible} timeout={500}>
<div>Контент появляется с разворачиванием</div>
</Collapse>
Fade для одновременного эффекта
прозрачности и изменения размера.SlideSlide позволяет компоненту появляться с
движением по направлению:
import { Slide } from '@mui/material';
<Slide direction="up" in={visible} timeout={700}>
<div>Выдвигающийся элемент</div>
</Slide>
direction задаёт направление появления:
up, down, left,
right.setTimeoutДля реализации временной паузы перед анимацией можно
комбинировать стейт и setTimeout:
const [visible, setVisible] = useState(false);
const showWithDelay = () => {
setTimeout(() => {
setVisible(true);
}, 1000); // задержка 1 секунда
};
<Button onCl ick={showWithDelay}>Показать с задержкой</Button>
Fade,
Grow или Slide.timeout в MUI-компонентах.TransitionProps и
setTimeout.Если необходимо, можно создавать каскадные появления
нескольких компонентов, задавая разную задержку каждому через
timeout или через отдельные стейты и
setTimeout. Такой подход часто используется в галереях,
карточках продуктов и интерфейсах с динамическим контентом.