React-Router动画实际上和React动画没什么区别,都是使用 'react-addons-css-transition-group' 这个组件;但是,和普通的 React-Router 的 App 的写法稍有t不同;

通常我们这样定义一个使用了 React-Router 的组件

export default React.createClass({
render() {
return <div>
{this.props.children}
</div>
}
})

但是当需要使用 ReactCSSTransitonGroup 的时候,需要写成如下:

const App = ({children, location}) => (
<div>
<CSSTransitionGroup
component="div"
transitionName="page"
transitionAppear={true}
transitionAppearTimeout={}
transitionEnterTimeout={}
transitionLeaveTimeout={}>
{React.cloneElement(children, {
key: location.pathname
})}
</CSSTransitionGroup>
</div>
)

上面是一个最基础的使用 ReactCSSTransitonGroup 的 App。

下面是几个示例:

Demo1: 参考自官方示例

var React = require('react');
var ReactDOM = require('react-dom');
var CSSTransitionGroup = require('react-addons-css-transition-group');
var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var hashHistory = ReactRouter.hashHistory;
var IndexRoute = ReactRouter.IndexRoute;
var Link = ReactRouter.Link; const App = ({children, location}) => (
<div>
<ul>
<li><Link to="/page1">Page </Link></li>
<li><Link to="/page2">Page </Link></li>
</ul>
<CSSTransitionGroup
component="div"
transitionName="page"
transitionAppear={true}
transitionAppearTimeout={}
transitionEnterTimeout={}
transitionLeaveTimeout={}>
{React.cloneElement(children, {
key: location.pathname
})}
</CSSTransitionGroup>
</div>
) const Index = () => (
<div className="Image">
<h1>Index</h1>
<p>Animations with React Router are not different than any other animation.</p>
</div>
) const Page1 = () => (
<div className="Image">
<h1>Page </h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Do eiusmod tempor incididunt ut labore
et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip exea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
laborum.</p>
</div>
) const Page2 = () => (
<div className="Image">
<h1>Page </h1>
<p>Consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
laborum.</p>
</div>
) ReactDOM.render((
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Index}/>
<Route path="page1" component={Page1}/>
<Route path="page2" component={Page2}/>
</Route>
</Router>
), document.getElementById('container'));

Demo2

var React = require('react');
var ReactDOM = require('react-dom');
var CSSTransitionGroup = require('react-addons-css-transition-group');
var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var hashHistory = ReactRouter.hashHistory;
var IndexRoute = ReactRouter.IndexRoute;
var Link = ReactRouter.Link; var Index = ()=>(<div>Index</div>) var App3 = ()=> (<div className="page1">ABCDEFGHIJKLMN</div>) var App4 = ()=> (<div className="page2">ABCDEFGHIJKLMNFKFKFKFK</div>) const App = ({children, location}) => (
<div>
<CSSTransitionGroup
component="div"
transitionName="page"
transitionAppear={true}
transitionAppearTimeout={}
transitionEnterTimeout={}
transitionLeaveTimeout={}>
{React.cloneElement(children, {
key: location.pathname
})}
</CSSTransitionGroup>
</div>
); ReactDOM.render(
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Index}/>
<Route path="page1" component={App3}/>
<Route path="page2" component={App4}/>
</Route>
</Router>,
document.getElementById('container'));

Demo3:

还可以不使用如上的方式,转而将每个App都使用 ReactCSSTransitionGroup 封装

var React = require('react');
var ReactDOM = require('react-dom');
var CSSTransitionGroup = require('react-addons-css-transition-group');
var ReactRouter = require('react-router');
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var hashHistory = ReactRouter.hashHistory;
var IndexRoute = ReactRouter.IndexRoute; var App1 = React.createClass({ handleClick: function () {
this.props.router.push('/page2');
}, render: function () {
return (
<CSSTransitionGroup
transitionName="page"
transitionAppear={true}
transitionAppearTimeout={}
transitionEnterTimeout={}
transitionLeaveTimeout={}>
<div onClick={this.handleClick} className="page1">ABC</div>
</CSSTransitionGroup>
)
}
}); var App2 = React.createClass({ handleClick: function () {
this.props.router.goBack();
}, render: function () {
return (
<CSSTransitionGroup
transitionName="page"
transitionAppear={true}
transitionAppearTimeout={}
transitionEnterTimeout={}
transitionLeaveTimeout={}>
<div onClick={this.handleClick} className="page2">ABCDEFGHIJKLMN</div>
</CSSTransitionGroup>
)
}
}); var App = ()=>(<div>Welcome App</div>) ReactDOM.render(
<Router history={hashHistory}>
<Route path="/page1" component={App1}></Route>
<Route path="/page2" component={App2}></Route>
</Router>, document.getElementById('container'));

page及相关样式

.page-appear {
opacity: 0.01;
margin-left: %;
-webkit-transition: all .5s;
transition: all .5s;
} .page-appear.page-appear-active {
margin-left: 0px;
opacity: ;
} .page-enter {
opacity: 0.01;
margin-left: %;
-webkit-transition: all .5s;
transition: all .5s;
} .page-enter.page-enter-active {
margin-left: 0px;
opacity: ;
} .page-leave {
opacity: ;
margin-left: 0px;
-webkit-transition: all .5s;
transition: all .5s;
} .page-leave.page-leave-active {
margin-left: -%;
opacity: 0.01;
} .page1 {
position: absolute;
background-color: red;
height: %;
width: %;
min-height: 400px;
} .page2 {
position: absolute;
background-color: deepskyblue;
height: %;
width: %;
min-height: 400px;
} .Image {
position: absolute;
height: 400px;
width: 400px;
} .link-active {
color: #bbbbbb;
text-decoration: none;
}

样式定义参考:[Link]

React-Router 动画 Animation的更多相关文章

  1. React 附件动画API ReactCSSTransitionGroup

    React为动画提供了一个附加组件ReactTransitionGroup,这个附加组件是动画的底层API,并且还提供了一个附件组件ReactCSSTransitionGroup,ReactCSSTr ...

  2. 最新的chart 聊天功能( webpack2 + react + router + redux + scss + nodejs + express + mysql + es6/7)

    请表明转载链接: 我是一个喜欢捣腾的人,没事总喜欢学点新东西,可能现在用不到,但是不保证下一刻用不到. 我一直从事的是依赖angular.js 的web开发,但是我怎么能一直用它呢?看看最近火的一塌糊 ...

  3. React Router教程

    React Router教程 React项目的可用的路由库是React-Router,当然这也是官方支持的.它也分为: react-router 核心组件 react-router-dom 应用于浏览 ...

  4. React Router API文档

    React Router API文档 一.<BrowserRouter> 使用HTML5历史记录API(pushState,replaceState和popstate事件)的<Rou ...

  5. React Router学习

    React Router教程 本教程引用马伦老师的的教程 React项目的可用的路由库是React-Router,当然这也是官方支持的.它也分为: react-router 核心组件 react-ro ...

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

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

  7. React之动画实现

    React之动画实现 一,介绍与需求 1.1,介绍 1,Ant Motion Ant Motion能够快速在 React 框架中使用动画.在 React 框架下,只需要一段简单的代码就可以实现动画效果 ...

  8. React Router 4.0 体验

    React Router 4.0 (以下简称 RR4) 已经正式发布,它遵循React的设计理念,即万物皆组件.所以 RR4 只是一堆 提供了导航功能的组件(还有若干对象和方法),具有声明式(声明式编 ...

  9. 动画animation的三个应用(漂浮的白云、旋转的星球、正方体合成)

    × 目录 [1]漂浮的白云 [2]旋转的星球 [3]正方体合成 前面的话 前面介绍过动画animation的详细用法,本文主要介绍动画animation的三个效果 漂浮的白云 [效果演示] [简要介绍 ...

随机推荐

  1. 记一次nginx -t非常慢的排障经历

    在一次修改nginx配置时候,执行 case: #/usr/local/nginx/sbin/nginx -t 出现执行命令出现很久没返回结果,也没返回成功或是失败,就是一直卡住的状态,严重影响ngi ...

  2. Gaussian Models

    Warming Up Before we talk about multivariate Gaussian, let's first review univariate Gaussian, which ...

  3. php 数组去重

    php 数组去重 数组中重复项的去除 2010-07-28 15:29 一维数组的重复项: 使用array_unique函数即可,使用实例如下: <?php                    ...

  4. java第三次试验报告

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计   班级:1353       姓名:郭皓  学号:20135327 成绩:             指导 ...

  5. Alpha版会议总结

    目前的进度: 实现了文字备忘的录入: 实现了提醒功能: 实现了可视化界面: 语音录入功能还没有完成: 界面相当粗糙: 遇到的问题: 语音录入按钮按下后没有反应,目前没有解决思路和方法. 原本的解屏功能 ...

  6. java 事务

    之前的事务介绍基本都是数据库层面的事务,本文来介绍一下J2EE中和事务相关的内容,在阅读本文之前,希望读者对分布式有一定的了解. 关于事务的基础知识这里不再详细介绍,想要了解的同学可以在我的博客中阅读 ...

  7. MIT挑战(如何在12个月内自学完成MIT计算机科学的33门课程|内附MIT公开课程资源和学习顺序

    译者注:本文译自Scott H. Young的博客,Scott拥有超强的学习能力,曾在12个月内自学完成麻省理工学院计算机科学的33门课程.本文就是他个人对于这次MIT挑战的介绍和总结. 版权声明:本 ...

  8. 团队作业4——第一次项目冲刺(Alpha版本)2017.11.16

    1.当天站立式会议照片 本次会议在5号公寓3楼召开,本次会议内容:①:熟悉每个人想做的模块.②:根据老师的要求将项目划分成一系列小任务.③:在上次会议内容完成的基础上增加新的任务. 2.每个人的工作 ...

  9. Redis4.0 主从复制(PSYN2.0)

    Redis4.0版本相比原来3.x版本,增加了很多新特性,如模块化.PSYN2.0.非阻塞DEL和FLUSHALL/FLUSHDB.RDB-AOF混合持久化等功能.尤其是模块化功能,作者从七年前的re ...

  10. ABP ModuleZero 添加角色_创建角色是报错的问题解决方案

    ABP升级后,大概3.6.1以后,在.net framework里面,从官方下载的Module zero模板添加角色是出现下面错误. 这个问题,算是新版apb的一点小缺憾,好像在.net core的模 ...