0Pricing
React Academy · Урок

Переходы 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 — локальная установка не требуется.

Все уроки этого курса

  1. Переходы CSS при изменении состояния React
  2. Анимации CSS с ключевыми кадрами в React
  3. useLayoutEffect для измерений перед анимацией
  4. Анимации появления и исчезновения без библиотеки
← Назад к React Academy