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