# npm
npm install react-transition-group --save
# yarn
yarn add react-transition-group
可导入使用的有四个组件对象:
CSSTransition执行过程中,有三个状态:appear、enter、exit;
它们有三种状态,需要定义对应的CSS样式:
.card-enter, .card-appear {
opacity: 0;
transform: scale(.8);
}
.card-enter-active, .card-appear-active {
opacity: 1;
transform: scale(1);
transition: opacity 300ms, transform 300ms;
}
.card-exit {
opacity: 1;
}
.card-exit-active {
opacity: 0;
transform: scale(.8);
transition: opacity 300ms, transform 300ms;
}
in:触发进入或者退出状态
unmountOnExit={true}
,那么该组件会在执行退出动画结束后被移除掉;classNames:动画class的名称
timeout:
appear:
其他属性可以参考官网来学习:
CSSTransition对应的钩子函数:主要为了检测动画的执行过程,来完成一些JavaScript的操作
import React, { Component } from 'react'
import { CSSTransition } from 'react-transition-group';
import '../style/ReactTransition.css'
interface IProps { }
interface IState {
isShowCard: boolean
}
class ReactTransition extends Component {
constructor(props) {
super(props)
this.state = {
isShowCard: true
}
}
render() {
return (
哈哈哈
)
}
}
export default ReactTransition
SwitchTransition可以完成两个组件之间切换的炫酷动画:
SwitchTransition中主要有一个属性:mode,有两个值
SwitchTransition还是需要通过CSSTransition来进行控制,使用key属性来控制(不能使用in属性)
import React, { Component } from 'react'
import { CSSTransition, SwitchTransition } from 'react-transition-group';
import '../style/ReactTransitionSwitch.css'
interface IProps {
}
interface IState {
isOn: boolean
}
class ReactTransitionSwitch extends Component {
constructor(props: IProps) {
super(props)
this.state = {
isOn: true
}
}
render() {
const { isOn } = this.state;
return (
{
}
)
}
}
export default ReactTransitionSwitch
ReactTransitionSwitch.css
.btn-enter {
transform: translate(100%, 0);
opacity: 0;
}
.btn-enter-active {
transform: translate(0, 0);
opacity: 1;
transition: all 500ms;
}
.btn-exit {
transform: translate(0, 0);
opacity: 1;
}
.btn-exit-active {
transform: translate(-100%, 0);
opacity: 0;
transition: all 500ms;
}
当我们有一组动画时,需要将这些CSSTransition放入到一个TransitionGroup中来完成动画:
import React, { PureComponent } from 'react'
import { CSSTransition, TransitionGroup } from 'react-transition-group';
import '../style/ReactTransitionGroup.css';
interface Iprops {
}
interface Istate {
friends: Array,
count: number
}
class ReactTransitionGroup extends PureComponent {
constructor(props: Iprops) {
super(props);
this.state = {
friends: [],
count: 0
}
}
render() {
return (
{
this.state.friends.map((item, index) => {
return (
{item}
)
})
}
)
}
}
export default ReactTransitionGroup
ReactTransitionGroup.css
.friend-enter {
opacity: 0;
}
.friend-enter-active {
opacity: 1;
transition: opacity 500ms ease-in;
}
.friend-exit {
opacity: 1;
}
.friend-exit-active {
opacity: 0;
transition: opacity 500ms ease-in;
}
.buttonAdd {
position: absolute;
top: 50%;
left: 55%;
}