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. PC端上必应词典与金山词霸的测评分析

    1.  介绍 随着英语学习越来越普及,基本上现在每位大学生的电脑上都会有一款便捷的英语查词软件,这次我们团队选择测评的 是微软必应词典(3.5.0.4311)和金山词霸(2014.05.16.044) ...

  2. 计算器简单封装和ASP.net

    封装: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...

  3. java9初探

    最近研究了一下java9的新特性,也看完了<Modularity Programming in Java 9>,有一些收获写博客记录一下. 1.java9初探

  4. 【转】SQL SERVER 中 sp_rename 用法

    因需求变更要改表的列名,平常都是跑到Enterprise manager中选取服务器->数据库->表,然后修改表,这样太麻烦了,查了一下,可以用script搞定,代码如下: EXEC sp ...

  5. CentOS下Neo4j安装教程

    本文记录一下在CentOS 6.7上,安装neo4j图数据库,本文安装的版本为neo4j-community-2.3.9-unix.tar.gz. 下载Neo4j安装包 使用wget命令获取Neo4j ...

  6. [百度贴吧]10GB 通信线缆

    现在,即使光纤通信能够带来最低延迟的优势,但是许多IT部门依然在10G以太网(10G bE)中使用铜缆布线,来实现交换机和交换机或者和服务器之间的连接.目前主要有两种主要的铜缆布线技术应用在10 Gb ...

  7. Mysql分库分表方案,如何分,怎样分?

    https://www.cnblogs.com/phpper/p/6937896.html 为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这 ...

  8. autoboxing and unboxing

    Why does 128==128 return false but 127==127 return true public static void autoboxingUnboxing(){ Int ...

  9. L2 L3 L4

    第二层交换机,是根据第二层数据链路层的MAC地址和通过站表选择路由来完成端到端的数据交换的.因为站表的建立与维护是由交换机自动完成,而路由器又是属于第三层设备,其寻址过程是根据IP地址寻址和通过路由表 ...

  10. maven下载、安装、卸载以及MyEclipse配置maven

    maven下载 官网下载:http://maven.apache.org/download.cgi 点击链接为官网下载页面,翻到下图所示位置,点击红框选项即可下载 maven安装 1.解压       ...