本篇文章给大家分享的是有关使用react-router怎么实现一个路由切换动画,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强> 1。插件依赖强>
使用的插件是<代码> react-transition-group> 代码。先简单介绍一下动画插件的使用方式。
<代码> CSSTransition 代码>这个组件有两个比较主要的属性:<代码> 代码>的关键和。
<代码>:布尔代码>属性其实可以理解为是否显示当前内容节点。真正<代码> 代码>则显示,<代码>假> 代码则不显示。
<代码>关键:字符串代码>这个属性是配合<代码> TransitionGroup> 代码组件来使用的。在一般的列表组件中(列如基于网络),可以通过<代码>键> 代码来判断列表中的子节点需要被插入还是移除,然后触发动画。
<强> 2。开关组件强>
这个组件有一个很重要的属性:<代码> 代码>位置。同时这个属性也是路由切换动画的关键所在。<代码>开关> 代码组件的子组件(一般是路由和重定向)会根据当前浏览器的位置<代码> 代码>作为匹配依据来进行路由匹配。但是如果<代码> 代码>切换组件定义了<代码> 代码>位置属性,其中的子组件就会以定义的<代码> 代码>位置作为匹配依据。
<强> 3。代码部分强>
import 反应,,{,Component },得到& # 39;反应# 39; import {TransitionGroup的不同之处是,CSSTransition },得到& # 39;react-transition-group& # 39; import {,开关,路线,withRouter },得到& # 39;react-router-dom& # 39; @withRouter class Routes  extends Component  { 渲染才能(),{ ,,,const 位置=this.props.location ,,,return ( ,,,,,& lt; TransitionGroup> ,,,,,,,& lt; CSSTransition 关键={location.key},超时={1000},一会=癴ade"比; ,,,,,,,,,& lt; Switch 位置={}位置比; ,,,,,,,,,,,& lt; Route 路径=?route-1",组件={Route1},/比; ,,,,,,,,,,,& lt; Route 路径=?route-2",组件={Route2},/比; ,,,,,,,,,& lt;/Switch> ,,,,,,,& lt;/CSSTransition> ,,,,,& lt;/TransitionGroup> ,,,) ,,} } export default 路线
<强> 4。原理分析强>
先确定需求:当切换路由的时候,旧的路由内容在一定时间内过渡消失,新的路由内容过渡显示。
在这个需要里面有两个重要的部分:
- <李>
过渡期间,会同时存在两个节点:新节点和旧节点
李> <李>旧节点应该显示旧的路由内容,新的节点应该显示新的路由内容
李> <强> 4.1同时存在两节点强>
刚刚提到的<代码> CSSTransition 代码>的<代码> 代码>属关键性可以决定该节点是否需要显示。
而路由器<代码> 代码>中的<代码> 代码>位置属性会在路由发生变化的时候,进行更新,而<代码> 代码>里位置面的<代码>键> 代码则可以作为<代码> CSSTransition 代码>的<代码>键代码>。
关于历史对象,可以理解为一个数组,当页面的位置发生变化时,或者刷新页面,历史就会推动一个新的历史信息。在这个历史信息里面,有一个<代码>键代码>属性,用来区分不同的历史记录(跳转新页面或者是刷新页面)
当路由切换的时候,位置对象就会改变,新的键会使得页面重新渲染时出现两个CSSTransition(新旧节点)。
<强> 4.2新旧节点对应新旧路由内容强>
如果只是配置关键<代码> 代码>属性,会发现旧的节点会去匹配新的路由内容。这是因为<代码>路径> 代码组件默认根据当前<代码> 代码>位置进行匹配。为了让旧节点中的<代码>路径> 代码根据旧的<代码> 代码>位置进行匹配,就需要设置开关<代码> 代码>的<代码> 代码>位置属性。
以上就是使用react-router怎么实现一个路由切换动画,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。