vue onclick时间_终于轮到Vue来带给React灵感了?

react-transition-group

今天在查看react-transition-group的时候,突然发现多出来了一个组件: 4d74b98e15cf3507e53248c5e79c439d.png

咦?奇怪,我记得以前明明只有仨啊,啥时候更新出来的?

好奇心驱使我点了进去新出现的那个SwitchTransition

真是不看不得了,一看吓一跳啊!

eeea94cbd140059804e428ec8141d6fd.png

考虑到大家的英文水平…(当然这句话好像不用啥英语水平都能看懂).

我来给大家翻译一下:

这是一个受到vue transition modes启发的过渡组件。说实话vue和react我都经常用,一直都觉得vue的transition组件和react的react-transition-group可像可像的了,几乎就是换了个别名,用法啥的都差不多,也不知道到底是谁抄的谁,也许他俩都是抄的Angular的动画库ng-animate。

哦~不对,应该叫启发,是谁受到了谁的启发(有没有感觉换了一个词瞬间就变得高大上了起来),其实本来大家都是开源的,把好的东西吸收借鉴过来是非常好的一件事情,但是由于vue一直给人的印象都是一个非常优秀的借鉴者而不是非常优秀的创新者,而React恰恰相反。

所以大家潜意识里一直以为是vue借鉴的react,直到今天我才发现原来vue早已拥有的模式,react-transition-group才刚刚实现,那就是过渡模式

bcf11ead62d4dcfb04e778a7269075f3.png

vue的transition

其实vue的官网描述的已经非常详细了,所以在这里我就不再重复叙述了,给大家一个传送门: vue transition  modes ,总而言之它实现了这么一个炫酷的功能: 在你的组件切换的时候,可以让将要移除的组件和将要进入的组件有个动画效果,这两个动画效果还有个时间差,时间差有两种模式,一是将要移除的组件先来个动画,比如淡出,等它淡出完了,新的组件再淡入,这样的时间差形成了完整的一套淡入淡出效果,另一种模式则完全相反,先新的组件淡入,再把老组件淡出。

SwitchTransition

然而就是在vue中很轻松就可以实现的炫酷效果在react中却没有对应的封装好的组件,只能自己很麻烦的实现,于是乎SwitchTransition横空出世啦!

用法:

首先react的过渡组件并不像vue那样直接集成在vue核心库之中,而是需要手动的去安装:

#npmnpm i react-transition-group -S#yarnyarn add react-transition-group
接着我们就来用react来模仿一下vue的官方案例:
//  /src/App.jsimport React, { useState } from 'react';import './App.css';import { CSSTransition, SwitchTransition } from 'react-transition-group'function App() {  const [ bool, setBool ] = useState(false)  const onClick = () => setBool(b => !b)  return (    <SwitchTransition>      <CSSTransition classNames="fade" timeout={1000} key={bool ? "on" : "off"}>        {          bool ? (<button onClick={onClick}>onbutton>)               : (<button onClick={onClick}>offbutton>)        }      CSSTransition>    SwitchTransition>  );}export default App;
/* /src/App.css */.fade-enter, .fade-exit-active {  opacity: 0;}.fade-enter-active {  opacity: 1;}.fade-enter-active, .fade-exit-active {  transition: opacity 1s;}
8e03004a0a0b811157e6bc55075d3193.gif至此我们就实现了vue官网过渡模式的第一个例子↑↑↑ 接下来我们实现第二个例子↓↓↓
//  /src/App.jsimport React, { useState } from 'react';import './App.css';import { CSSTransition, SwitchTransition } from 'react-transition-group'function App() {  const [ bool, setBool ] = useState(false)  const onClick = () => setBool(b => !b)  return (    <div className="relative">      <SwitchTransition mode="in-out">        <CSSTransition classNames="fade" timeout={500} key={bool ? "on" : "off"}>          {            bool ? (<button className="btn" onClick={onClick}>onbutton>)                : (<button className="btn" onClick={onClick}>offbutton>)          }        CSSTransition>      SwitchTransition>    div>  );}export default App;
/* /src/App.css */.fade-enter {  opacity: 0;  transform: translateX(100%);}.fade-enter-active {  transform: translateX(0);  opacity: 1;}.fade-exit {  transform: translateX(0);}.fade-exit-active {  opacity: 0;  transform: translateX(-100%);}.fade-enter-active, .fade-exit-active {  transition: opacity .5s, transform .5s;}.relative {  position: relative;}.btn {  position: absolute;  top: 0;  left: 0;}
8e03004a0a0b811157e6bc55075d3193.gif
  • 第一个例子是默认模式:mode="out-in" 看名字就很容易理解:旧组件先执行出场动画,然后新组件再执行入场动画。
  • 第二个例子是:mode="in-out" 看动态图就明白了:先进后出。
在SwitchTransition组件上一共就只有mode这么一个属性,属性一共就只有俩值:out-in、in-out,如果是out-in的话甚至连属性都可以省略不写了,因为是默认属性。

注意事项:

  1. 组件里面要有或者组件,不能直接包裹你想要切换的组件。
  2. 里面的或组件不再像以前那样接受in属性来判断元素是何种状态,取而代之的是key属性,底层是通过key属性来判断组件该执行移入还是移出动画的。

结束语: 怎么样是不是很好玩呢,带大家复习了一遍Vue的同时顺便又学习了一下react-transition-group的新组件,赶紧打开命令行create个react-app然后yarn add react-transition-group一下吧! 作者:流连牛年榴莲甜 原创内容来自:http://t.cn/A67XgZ1y 5d3494663402548a6650148d58d1f02e.png 往期精选: 揭开 JavaScript 引擎的面纱 利用网络爬虫,初识搜索引 漫画:如何优化 “字符串匹配算法”? d6f2d0ebaa6098086eea7a898b0def5c.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值