import React,{ Component,Fragment } from 'react';
import './style.css';
import { CSSTransition,TransitionGroup } from 'react-transition-group';

class App extends Component{

  constructor(props){
    super(props);
    his.state = {
      show: true,
      list:[1,2]
    }
    // this.handleToggle = this.handleToggle.bind(this)
    this.handleAddItem = this.handleAddItem.bind(this)
  }

  render() {
    return (
      <Fragment>
        {/*<CSSTransition
          in={this.state.show}
          timeout={1000}
          classNames='fade'
          unmountOnExit
          onEntered={(el) => {
            el.style.color="blue"
          }}
          appear={true}
        >
          <div>hello</div>
        </CSSTransition>*/}
        <TransitionGroup>
          {
            this.state.list.map((item,index)=>{
              return (
                <CSSTransition
                  key={ index }
                  timeout={1000}
                  classNames='fade'
                  unmountOnExit
                  onEntered={(el) => {
                    el.style.color="blue"
                  }}
                >
                  <div >{ item }</div>
                </CSSTransition>
              )
            })
          }
        </TransitionGroup>

        {/*<div className={this.state.show?'show' : 'hide'}>hello</div>*/}
        <button onClick={ this.handleAddItem }>toggle</button>
      </Fragment>
    )
  }  

  // handleToggle() {
    // this.setState({
      // show: !this.state.show
    // })
  // }
  handleAddItem(){
    this.setState((prevState) => {
      return {
        list: [...prevState.list,'item']
      }
    })
  }

}

export default App

style.css

.input{
border:1px dashed red;
}

/*.show{
opacity:1;
transition: all 1s ease-in;
}

.hide{
opacity:0;
transition: all 1s ease-in;
}*/

.show{
animation: show-item 2s ease-in forwards;
}

.hide{
animation: hide-item 2s ease-in forwards;
}
@keyframes show-item{
0%{
opacity:0;
color:red;
}
50%{
opacity:0.5;
color:green;
}
100%{
opacity:1;
color:blue;
}
}

@keyframes hide-item{
0%{
opacity:1;
color:red;
}
50%{
opacity:0.5;
color:green;
}
100%{
opacity:0;
color:blue;
}
}

.fade-enter{
  opacity: 0;
}
.fade-enter-active .fade-appear{
  opacity: 1;
  transition: opacity 1s ease-in;
}
.fade-enter-done{
  opacity: 1;
  color:red;
}
.fade-exit{
  opacity: 1;
}
.fade-exit-active{
  opacity: 0;
  transition: opacity 1s ease-in;
}
.fade-exit-done{
  opacity: 0;
}

react react-transition-group实现动画的更多相关文章

  1. [RN] React Native 下拉放大动画

    React Native 下拉放大动画 经测试,无法运行 https://www.jianshu.com/p/1c960ad75020

  2. React+React Router+React-Transition-Group实现页面左右滑动+滚动位置记忆

    2018年12月17日更新: 修复在qq浏览器下执行pop跳转时页面错位问题 本文的代码已封装为npm包发布:react-slide-animation-router 在React Router中,想 ...

  3. [React] react+redux+router+webpack+antd环境搭建一版

    好久之前搭建的一个react执行环境,受历史影响是webpack3.10.0和webpack-dev-server2.7.1的环境,新项目准备用webpack4重新弄弄了,旧的记录就合并发布了(在没有 ...

  4. React/React Native 的ES5 ES6写法对照表

    //es6与es5的区别很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component ...

  5. React/React Native 的ES5 ES6写法对照表-b

    很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教 ...

  6. [React] React Fundamentals: Integrating Components with D3 and AngularJS

    Since React is only interested in the V (view) of MVC, it plays well with other toolkits and framewo ...

  7. 使用transform和transition制作CSS3动画

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  8. React: React组件的生命周期

    一.简介 在前面的第二篇博文中对组件的生命周期虽然做了一个大略介绍,但总感觉说的过于简单,毕竟生命周期是React组件的核心部分.在我们熟练使用React挂载和合成组件来创建应用表现层的过程中,针对数 ...

  9. React: React的属性验证机制

    一.简介 在开发中,属性变量类型的验证,几乎是任何语言都必须关注的问题,因为如果传入的数据类型不对,轻者程序运行仅仅是给出警告⚠️,严重的会直接导致程序中断,APP闪退或者web页面挂掉,这是很严重的 ...

  10. React/react相关小结

    React React组件由React元素组成,React组件使用React.Component或React.PureComponent来生成:React元素使用JSX的语法来编写或使用React.c ...

随机推荐

  1. python三大神器

    Python 中有很多优秀的包,本文主要讲一下 pip, virtualenv, fabric 1. pip 用来包管理 文档:https://pip.pypa.io/en/latest/instal ...

  2. CentOS7开启防火墙及特定端口

    开启防火墙服务 以前为了方便,把防火墙都关闭了,因为现在项目都比较重要,害怕受到攻击,所以为了安全性,现在需要将防火墙开启,接下来介绍一下步骤. 1, 首先查看防火墙状态: firewall-cmd ...

  3. 【Linux】时间同步设置+防火墙设置+SELinux设置

    时间同步设置 在大数据集群环境中,要求每台集群的时间必须是同步的,这样我们就会要求每台集群的时间必须和一台服务的时间是同步的.接下来介绍一下步骤: 1,设置ntp客户端 yum -y install ...

  4. 【转】MySQL-Select语句高级应用

    [转]MySQL-Select语句高级应用 1.1 SELECT高级应用 1.1.1 前期准备工作 本次测试使用的是world数据库,由mysql官方提供下载地址: https://dev.mysql ...

  5. Linux系统特点

    自由软件 真正的多用户.多任务操作系统 极强的平台可伸缩性 强大的管理功能 强大的网络功能

  6. 题解-USACO18DEC Sort It Out

    Problem 洛谷5156 题意概要:给定一个长为\(n\)的排列,可以选择一个集合\(S\)使这个集合内部元素排到自己在整个序列中应该在的位置(即对于集合\(S\)内的每一个元素\(i\),使其排 ...

  7. 最新sublime text 3 注册码license分享(亲测有效)

    —– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA ...

  8. Light OJ 1148

    题意: 给你N 个人, 每个人说出有多少人和他一队, 不包括他自己, 输出总人数最少值 思路: 排个序, 按照给的数目把人分为一组,就可以得出最少人数 #include<bits/stdc++. ...

  9. Socket实现断线重连

    客户端维护一个线程安全的待发送信息队列   开启死循环   判断Socket = null   调用Socket的sendUrgentData(0xFF)发送1个字节的心跳包   捕捉到连接异常后就关 ...

  10. JetBrains GoLand 2018 激活码/ 注册码(最新破解方法)

    1 前言 本机测试环境如下: Goland版本:2018.1.5 电脑系统:win7 64位 JetbrainsCrack.jar:链接: https://pan.baidu.com/s/1blmN3 ...