React-transition-group

React 过渡动画插件

react-transition-group 插件是 React 的 Animation Add-Ons(ReactTransitionGroup 和 ReactCSSTransitionGroup)拆分出来的插件,是 React 动画库的重要组成部分

装包

  1. npm install react-transition-group --save

使用

根据组件内部 state 的改变来触发组件的动画处理

导入

首先导入使用的 Components ,这里我们使用 CSSTransitionGroup

  1. import { CSSTransitionGroup } from 'react-transition-group'

创建 state

创建一个空的 item 状态来添加出现的动画组件

  1. constructor(){
  2. super()
  3. this.state = {
  4. item: [{name:'yu'}]
  5. }
  6. }

添加 CSS

  1. /* react-transition-group custom */
  2. .example-enter {
  3. opacity: 0.01;
  4. }
  5. .example-enter.example-enter-active {
  6. opacity: 1;
  7. transition: opacity 500ms ease-in;
  8. }
  9. .example-leave {
  10. opacity: 1;
  11. }
  12. .example-leave.example-leave-active {
  13. opacity: 0.01;
  14. transition: opacity 300ms ease-in;
  15. }

添加动画需要的组件

给需要触发动画的 Dom 添加并监听事件,添加动画组件<CSSTransitionGroup>,使其点击<button>按钮添加 items 插件

  1. import React from 'react'
  2. import { CSSTransitionGroup } from 'react-transition-group'
  3. class Comcard extends React.Component {
  4. constructor(){
  5. super()
  6. this.state = {
  7. item: [{name:'yu'}]
  8. }
  9. }
  10. handleClick = () => {
  11. let newItems = this.state.item.slice()
  12. newItems.push({
  13. name: 'liu'
  14. })
  15. this.setState({
  16. item: newItems
  17. })
  18. }
  19. render(){
  20. const items = this.state.item.map( (item,i) => (
  21. <div key={i}>{item.name}</div>
  22. ))
  23. return(
  24. <div className="comcard">
  25. <CSSTransitionGroup
  26. transitionName="example"
  27. transitionEnterTimeout={500}
  28. transitionLeaveTimeout={300}>
  29. {items}
  30. </CSSTransitionGroup>
  31. <button onClick={this.handleClick}>点击</button>
  32. </div>
  33. )
  34. }
  35. }
  36. export default Comcard

参考