本篇文章给大家分享的是有关使用react-router怎么实现一个路由切换动画,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
创新互联IDC提供业务:温江服务器托管,成都服务器租用,温江服务器托管,重庆服务器租用等四川省内主机托管与主机租用业务;数据中心含:双线机房,BGP机房,电信机房,移动机房,联通机房。1.插件依赖
使用的插件是react-transition-group
。先简单介绍一下动画插件的使用方式。
CSSTransition
这个组件有两个比较主要的属性:key和in
。
in:Boolean
属性其实可以理解为是否显示当前内容节点。true
则显示,false
则不显示。
key:String
这个属性是配合TransitionGroup
组件来使用的。在一般的列表组件中(列如 todolist),可以通过key
来判断列表中的子节点需要被插入还是移除,然后触发动画。
2. Switch 组件
这个组件有一个很重要的属性:location
。同时这个属性也是路由切换动画的关键所在。Switch
组件的子组件(一般是 Route 和 Redirect)会根据当前浏览器的location
作为匹配依据来进行路由匹配。但是如果Switch
组件定义了location
属性,其中的子组件就会以定义的location
作为匹配依据。
3.代码部分
import React, { Component } from 'react' import { TransitionGroup, CSSTransition } from 'react-transition-group' import { Switch, Route, withRouter } from 'react-router-dom' @withRouter class Routes extends Component { render() { const location = this.props.location return () } } export default Routes
4.原理分析
先确定需求:当切换路由的时候,旧的路由内容在一定时间内过渡消失,新的路由内容过渡显示。
在这个需要里面有两个重要的部分:
过渡期间,会同时存在两个节点:新节点和旧节点
旧节点应该显示旧的路由内容,新的节点应该显示新的路由内容
4.1 同时存在两节点
刚刚提到的CSSTransition
的key
属性可以决定该节点是否需要显示。
而Router
中的location
属性会在路由发生变化的时候,进行更新,而location
里面的key
则可以作为CSSTransition
的key
。
关于 history 对象,可以理解为一个数组,当页面的 location 发生变化时,或者刷新页面,history 就会push一个新的历史信息。在这个历史信息里面,有一个key
属性,用来区分不同的历史记录(跳转新页面或者是刷新页面)
当路由切换的时候,location对象就会改变,新的key会使得页面重新渲染时出现两个CSSTransition(新旧节点)。
4.2 新旧节点对应新旧路由内容
如果只是配置key
属性,会发现旧的节点会去匹配新的路由内容。这是因为Route
组件默认根据当前location
进行匹配。为了让旧节点中的Route
根据旧的location
进行匹配,就需要设置Switch
的location
属性。
以上就是使用react-router怎么实现一个路由切换动画,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联成都网站设计公司行业资讯频道。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。