0Pricing
React Academy · Урок

Анимации появления и исчезновения без библиотеки

Реализуйте анимации монтирования и размонтирования, вручную управляя временем отображения и прозрачности в React.

«Анимации появления и исчезновения без библиотеки» — бесплатный урок React Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Проблема размонтирования

Когда Вы условно отрисовываете элемент с помощью {show && }, React удаляет его из DOM сразу после того, как show становится равным false. Времени на анимацию выхода не остаётся, потому что узел уже удалён.

Анимации появления просты, а анимации выхода — настоящая проблема.

Решение 1: не размонтировать элемент

Самое простое решение — никогда не размонтировать элемент. Оставьте его отрисованным, при скрытии анимируйте opacity до нуля и задайте pointer-events: none, а при показе верните прозрачность к единице.

Так Вы получите плавное исчезновение и появление, но элемент при этом останется в DOM.

Решение 2: конечный автомат монтирования

Если нужно действительно размонтировать элемент, смоделируйте небольшой конечный автомат с такими фазами, как mounting, mounted, unmounting и unmounted. Удаляйте узел только после завершения анимации выхода.

Состояние определяет, какие классы анимации применяются на каждой фазе.

Хук useMount

Логику автомата можно инкапсулировать в пользовательском хуке, который часто называют useMount. Он принимает требуемую видимость и возвращает признак того, должен ли элемент находиться в DOM, а также его текущую фазу.

Компоненты остаются простыми, поскольку логика управления временем находится в повторно используемом хуке.

Пары классов появления и выхода

Следуя распространённым соглашениям, при монтировании применяйте enter, а затем enter-active, а при удалении — exit, а затем exit-active. Базовый класс задаёт исходное состояние, а активный класс — конечное состояние и переход.

Переключение между ними в нужный момент создаёт анимацию.

Отслеживание окончания перехода

Чтобы определить момент завершения анимации выхода, отслеживайте событие transitionend на элементе. Когда оно срабатывает для выхода, переведите состояние в unmounted и удалите узел.

Так размонтирование точно связывается с окончанием визуальной анимации, а не с приблизительно рассчитанной задержкой.

Повторно используемый компонент перехода

Всю эту логику можно обернуть в компонент Transition, который принимает свойство in и дочерние элементы. Он оставляет дочерние элементы смонтированными до завершения анимации выхода и применяет правильные классы на каждой фазе.

Пользователю компонента достаточно переключать in, чтобы автоматически получить корректные анимации появления и выхода.

Правильный запуск активного класса

Есть одна важная тонкость: сначала нужно позволить браузеру отрисовать исходный класс и только потом добавить активный, иначе элемент скачком изменит состояние без перехода. Вызов requestAnimationFrame или принудительный перерасчёт между этими действиями гарантирует, что переход действительно выполнится.

Так браузер сначала зарегистрирует исходные значения.

Сравнение с react-transition-group

Библиотека react-transition-group предоставляет компоненты Transition и CSSTransition, которые реализуют именно этот шаблон, включая жизненный цикл классов и момент размонтирования.

Ваша версия DIY повторяет основные идеи библиотеки, поэтому после самостоятельной реализации понять её становится легко.

Когда использовать библиотеку, а когда DIY

Для одного простого затухания достаточно подхода с постоянным монтированием или небольшого хука — так Вы избежите зависимости. Если Вам нужны многочисленные согласованные переходы, списки с добавлением и удалением или сложная последовательность, библиотека сэкономит время и поможет избежать ошибок в крайних случаях.

Выбирайте подход с учётом реальной сложности анимации, необходимой Вашему приложению.

Собираем всё вместе

Для анимаций выхода нужно сохранять элемент до завершения его анимации: не размонтировать его вообще, использовать конечный автомат с transitionend или применить библиотеку.

Понимание механики позволяет выбрать самый простой подход, соответствующий Вашим требованиям.

Быстрая проверка

Проверьте, насколько хорошо Вы понимаете анимации выхода.

Итоги

Вы узнали, почему анимации выхода сложны, о двух решениях — постоянном монтировании и конечном автомате монтирования, — как transitionend определяет момент размонтирования и как создать повторно используемый компонент Transition.

Вы также узнали, когда вместо DIY стоит использовать react-transition-group.

Часто задаваемые вопросы

Урок «Анимации появления и исчезновения без библиотеки» бесплатный?

Да — полный текст урока «Анимации появления и исчезновения без библиотеки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Анимации появления и исчезновения без библиотеки»?

Реализуйте анимации монтирования и размонтирования, вручную управляя временем отображения и прозрачности в React. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Анимации появления и исчезновения без библиотеки»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

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