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. nohup命令详解

    基础命令学习目录首页 原文链接:https://blog.csdn.net/hfismyangel/article/details/80258126 1.nohup 用途:不挂断地运行命令. 语法:n ...

  2. numastat命令详解

    基础命令学习目录 作者:[吴业亮]博客:http://blog.csdn.net/wylfengyujiancheng一.系统架构的演进从SMP到NUMA1.SMP(Symmetric Multi-P ...

  3. PyCharm配置SFTP远程调试Django应用

    http://www.ithao123.cn/content-41747.html http://www.th7.cn/system/lin/201703/205998.shtml

  4. TeamWork#3,Week5,Scrum Meeting 11.15

    经过最近一段时间的努力,我们调整了爬虫结构,并在继续进行爬虫开发,马上可以进行新爬虫与服务器连接的测试. 成员 已完成 待完成 彭林江 基本完成爬虫结构调整 新爬虫与服务器连接 郝倩 基本完成爬虫结构 ...

  5. iOS自学-监听按钮点击、提醒框

    //事件监听的问题 CGRect btn2Frame = CGRectMake(100.0, 150.0, 60.0, 44.0); //两种不同的方式创建 UIButton *btn2 = [UIB ...

  6. 24_IO_第24天(转换流、缓冲流)_讲义

    今日内容介绍 1.转换流 2.缓冲流 01转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流 ...

  7. 15_常用API_第15天(Object、String、StringBuffer、用户登陆注册)_讲义

    今日内容介绍 1.Object 2.String 3.StringBuilder 01API概念 A:API(Application Programming Interface) 应用程序编程接口 B ...

  8. 微信小程序demo——入门级(附源码)

    最近小程序又蠢蠢欲动,出了一个公众号绑定小程序功能,目测不错,就看了下微信小程序文档,顺便写了几行代码,后续有空会持续更新维护. 源码:https://github.com/SibreiaDante/ ...

  9. 微服务架构之思维三部曲:What、Why、How

    本文转自:http://www.servicemesh.cn/?/article/49 What:什么是微服务? 某百科对微服务架构的定义和阐述:微服务可以在“自己的程序”中运行,并通过“轻量级设备与 ...

  10. APP端测试与web端测试的区别

    想要知道APP端测试与web端测试的区别 ,那么我们就要先来了解,web和app的区别. web项目,一般都是b/s架构,基于浏览器的,而app则是c/s的,必须要有客户端.那么在系统测试测试的时候就 ...