Переходы CSS при изменении состояния React
Запускайте переходы CSS, переключая имена классов с помощью состояния React: переходы прозрачности, преобразования и цвета.
«Переходы CSS при изменении состояния React» — бесплатный урок React Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
Что такое переход CSS
Переход CSS transition плавно изменяет свойство между двумя значениями с течением времени вместо мгновенного переключения. Вы задаёте его для элемента с помощью transition: property duration timing-function delay.
В React обычно не нужно вручную анимировать значения встроенных стилей. Вместо этого Вы переключаете класс или стиль с помощью состояния, а CSS обрабатывает промежуточные кадры.
Запуск перехода переключением класса
Распространённый шаблон — хранить логическое значение в useState и менять класс CSS при его изменении. Когда класс меняется, целевое свойство получает новое значение, а CSS анимирует разницу между ними.
Например, isOpen определяет, есть ли у элемента класс open, а класс open задаёт другую высоту или преобразование.
Логическое состояние isVisible
Типичная настройка выглядит так: const [isVisible, setIsVisible] = useState(false). Кнопка вызывает setIsVisible(v => !v), чтобы переключить состояние.
Функциональная форма обновления v => !v предотвращает использование устаревшего состояния, когда несколько обновлений становятся в очередь, и делает переключение надёжным.
Условный класс с помощью строкового шаблона
Вы создаёте className динамически: className={'panel ' + (isVisible ? 'panel--shown' : 'panel--hidden')}. Базовый класс содержит объявление перехода, а классы-модификаторы — начальное и конечное значения.
Если хранить transition во всегда присутствующем базовом классе, анимация будет выполняться в обоих направлениях — при открытии и закрытии.
Одновременный переход преобразования и непрозрачности
Можно анимировать несколько свойств одновременно, перечислив их: transition: transform 300ms ease, opacity 300ms ease. Эффект плавного появления сочетает изменение непрозрачности с перемещением по оси Y с помощью преобразования.
Одновременная анимация создаёт аккуратное появление: элемент скользит вверх и постепенно становится непрозрачным.
Поэтапное появление с помощью transition-delay
transition-delay откладывает начало перехода. Если задать элементам списка постепенно увеличивающиеся задержки, получится каскадное появление, при котором каждый элемент анимируется немного позже предыдущего.
В React задержку можно вычислять непосредственно в строке, например style={{ transitionDelay: index * 50 + 'ms' }}.
Почему свойство display нельзя анимировать
Свойство display нельзя анимировать, поскольку между none и block нет промежуточных значений. Переход этого свойства приводит к мгновенному скачку, а не к плавному появлению.
Вместо этого анимируйте opacity для визуального появления и переключайте pointer-events: none, чтобы скрытый элемент игнорировал щелчки, пока он невидим.
Функции времени
Функция времени определяет, как меняется скорость на протяжении всей длительности. linear обеспечивает постоянную скорость, ease медленно начинается и заканчивается, а cubic-bezier(...) позволяет задать полностью собственную кривую.
Собственные кривые отлично подходят для резких или пружинящих эффектов, например cubic-bezier(0.34, 1.56, 0.64, 1) создаёт небольшое превышение конечного значения.
Переменные CSS для длительности
Длительности можно хранить в пользовательских свойствах CSS, например --speed: 300ms, и повторно использовать их: transition: opacity var(--speed) ease. Это сохраняет единообразную длительность переходов в разных компонентах.
React может даже задавать переменную непосредственно в строке с помощью style={{ '--speed': '500ms' }}, позволяя свойствам компонента управлять длительностью анимации.
Выбирайте преобразование и непрозрачность для повышения производительности
Браузеры могут анимировать transform и opacity на композиторе GPU без перерасчёта компоновки и перерисовки. Анимация таких свойств, как width, top или margin, заставляет браузер выполнять работу по компоновке на каждом кадре и может приводить к рывкам.
Когда нужно переместить, масштабировать или повернуть элемент, используйте transform; когда нужно создать плавное появление, используйте opacity.
Собираем всё вместе
Надёжный переход в React сочетает логическое состояние, условный класс-модификатор и базовый класс, объявляющий transition для свойств, подходящих для GPU. Состояние меняет класс, а CSS выполняет анимацию.
Так компоненты остаются декларативными, а браузер создаёт плавное движение.
Быстрая проверка
Проверьте, насколько хорошо Вы поняли анимацию с высокой производительностью.
Итоги
Вы научились запускать переходы CSS переключением классов, управляемых состоянием, одновременно анимировать преобразование и непрозрачность, добавлять задержки для каскадного появления и избегать переходов для display, используя непрозрачность и отключение событий указателя.
Вы также познакомились с функциями времени, длительностями в переменных CSS и узнали, почему свойства, компонуемые на GPU, обеспечивают плавность движения.
Часто задаваемые вопросы
Урок «Переходы CSS при изменении состояния React» бесплатный?
Да — полный текст урока «Переходы CSS при изменении состояния React» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Переходы CSS при изменении состояния React»?
Запускайте переходы CSS, переключая имена классов с помощью состояния React: переходы прозрачности, преобразования и цвета. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Переходы CSS при изменении состояния React»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Переходы CSS при изменении состояния React
- Анимации CSS с ключевыми кадрами в React
- useLayoutEffect для измерений перед анимацией
- Анимации появления и исчезновения без библиотеки