react 路由动画的学习 --笔记记录

路由切换动画

路由切换过程中为了增强切换效果,需要为对应的路由页面添加对应的过渡效果,此时需要使用路由动画。react中路由动画的实现需要借助于react匹配的插件react-transition-group。

react-transition-group 基本知识:

在 react 项目中可使用官网提供的动画过渡库 react-transition-group 来实现切换页面(路由切 换)时的过渡效果。
路由切换动画

   npm i  react-transition-group

react-transition-group模块提供了四个组件:

1、Transition
2、CssTransition
3、TransitionGroup
4、SwitchTransition 以上组件2和3我们会经常用到。TransitionGroup不提供动画效果,只是动画的容器(动画列表)

CssTransition组件有很多重要的API:

in 为控制动画开启关闭的“开关”,true为开启,false为关闭
classNames 为对应的样式类名,和下面的css内的名字对应
timeout 为动画执行时间 ,延迟,涉及到动画状态的持续时间。也可传入一个对象
unmountOnExit 当动画效果为隐藏时, true 该标签会从dom树上移除 ,false ,类似js操作
appear 是否第一次加载该组件时启用相应的动画渲染,css文件中有含有appear的均和此标签相关
onEntered 入场动画结束时触发的钩子
onEnter 入场动画第一帧时执行
onEntering 当入场动画执行到第二帧时执行
onExit 出场动画第一帧时执行
onExiting 出场动画第二帧时执行
onExited 整个动画出场结束时执行
key: string这个属性配合TransitionGroup很重要,可以通过key来判断是否需要触发动画。这个属性十分重要。

4、页面转场动画

基于以上对react-router和react-transition-group的介绍,我们已经掌握了基础,接下来就可以将两者结合起来做页面切换的转场动画了。在上一案例的末尾有提到,用了TransitionGroup之后我们的问题变成如何选择合适的key值。那么在路由系统中,什么作为key值比较合适呢?
既然我们是在页面切换的时候触发转场动画,自然是跟路由相关的值作为key值合适了。而react-router中的location对象就有一个key属性,它会随着浏览器中的地址发生变化而变化。然而,在实际场景中似乎并不适合,因为query参数或者hash变化也会导致location.key发生变化,但往往这些场景下并不需要触发转场动画。

注意 Switch 有一个很重要的属性:

location。一般我们不会给该组件设置 location 属性。 有无该属性的区别: 不设置location属性: Switch
组件的子组件(一般是 Route 或 Redirect)会根据当前浏览器的 location 作为匹配依据來进行路由匹配。
设置location属性: Switch 组件的子组件会根据定义的 location 作为匹配依据。

注意:Switch需要添加location

如果不添加,那么在转场动画中会发生很奇怪的现象,就是同时有两个相同的节点在移动。这是因为TransitionGroup组件虽然会保留即将被remove的Switch节点,但是当location变化时,旧的Switch节点会用变化后的location去匹配其children中的路由。由于location都是最新的,所以两个Switch匹配出来的页面是相同的。好在我们可以改变Switch的location属性,如上述代码所示,这样它就不会总是用当前的location匹配了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扶梡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值