Анимация
Last updated
Was this helpful?
Last updated
Was this helpful?
CSS3 переходы и анимации это лучший метод для простой анимации, но только в тех случаях, когда над анимируемым элементом не выполняются операции удаления и добавления в DOM.
Использование CSS для скрытия элементов противоречит идеологии React, разметка остается в DOM-дереве, и практически невозможно нормально сделать анимацию исчезновения. Анимация добавления и удаления элементов коллекции излишне сложная.
Эта библиотека не анимирует стили самостоятельно. Вместо этого, разработчику предоставляется набор простых компонентов, которые отслеживают этапы перехода состояния элемента (добавления и удаления в DOM) и управляют CSS-стилями, тем самым позволяя применить определенный CSS на каждом этапе.
Компонент на базе которого построены остальные. Позволяет описывать переход компонента от одного состояния к другому с течением времени. По умолчанию компонент <Transition>
не изменяет поведение компонента, который он отображает, а только отслеживает состояния enter
и exit
. Разработчик может сделать кастомные эффекты (например, добавляя инлайн стили или классы) под эти состояния.
Существует 4 основных состояния, в которых может быть элемент:
entering
- элемент появляется в DOM
entered
- элемент появился в DOM
exiting
- элемент удаляется из DOM
exited
- элемент удален из DOM
Пропы:
in
- буль, сигнализирует о начале стадии появления или удаления элемента.
timeout
- время перехода, кол-во миллисекунд которое будет использовано для всех стадий, либо объект с полями под стадии enter
и exit
.
unmountOnExit
- отвечает за удаление элемента из DOM-дерева после фазы exit
.
Если значение пропа in
равно true
, компонент начинает стадию входа
. Он переходит из текущего состояния к entering
и останавливается в нем на указанное в timeout
время, по истечении которого переходит в entered
.
Если значение пропа in
равно false
, компонент начинает стадию Выхода
. Он переходит из текущего состояния к exiting
и останавливается в нем на указанное в timeout
время, по истечении которого переходит в exited
.
Компонент <CSSTransition>
, в отличии от <Transition>
, инкапсулирует отслеживание стадии перехода и вызывает перекомпоновку (reflow) в браузере, что позволяет без дополнительных усилия реализовать анимацию добавления элемента. Получает те же самые пропы in
, timeout
и другие, а также проп classNames
, в котором можно указать кастомные имена классов для каждой фазы перехода.
Применяет пару CSS-классов для каждой из стадий appear
, enter
, exit
и done
во время перехода. На старте каждой фазы применяется базовый класс, после чего сразу применяется класс с приставкой active
. Разработчику достаточно передать имя базового класса и описать классы для каждой из стадий.
К примеру если базовый класс fade
:
Пропу classNames
можно передать объект с кастомными именами классов под каждую стадию.
Если используются CSS-модули, то имена классов можно назвать как имена ключей на объекте для classNames
и передать объект классов целиком.
Всего 6 штук, происходят в указанном порядке. Используются для управления сложными анимациями и выполнения кода на определенной стадии.
Компонент <TransitionGroup>
используется как контейнер для управления коллекцией компонентов <Transition>
или <CSSTransition>
. При удалении и добавлении элементов коллекции, <TransitionGroup>
автоматически указывает значение пропа in
добавляемого или удаляемого элемента.
Принимает проп component
, в котором можно указать тип HTML-элемента который необходимо отрендерить как контейнер, по умолчанию будет div
. Для передачи стилей есть проп className
, значение которого передается элементу.