react-router 让路由切换动起来

单页应用流行起来之后,不用再刷新页面,用户体验好了很多。我们从一个页面跳转到另外一个页面,只要一点就过去了。 但是这个动作久了之后,就会觉得点一下就跳过去了,显得很突兀,人们又开始不满足了,又脑洞大开,提了一些需求让程序员要去造造造...😂毕竟,给人家一个绚丽的动画, 人家也有心情多点几下嘛😂

react-transition-group

react官方的动画库,提供四个组件。这四个组件都不做任何展示,只是通过跟踪组件的加载卸载,对我们暴露了api,在对应的时间点加上对应的动画类,就可以实现路由跳转的动画(当然不只是路由)。

我这里看上了CSSTransition

import "animate.css"
import { CSSTransition } from 'react-transition-group'
export default function TransitionRoute({component: Component, ...rest}) {
  return (
    <Route {...rest}>
      {props => {
        return <CSSTransition
          in={props.match ? true : false}
          timeout={1000}
          classNames={{
            enter: "animated fast bounceInRight",
            exit: "animated fast bounceOutRight"
          }}
          mountOnEnter
          unmountOnExit
        >
          <Component {...props}></Component>
        </CSSTransition>
      }}
    </Route>
  )
}

这里返回一个 Route。 在此组件中将Component属性解构出来, 用于后面渲染, 剩下的属性(比如至少还有 path)传递给 Route,才能保持Route的正常功能。
然后不给 Route=> component 属性,我们在 Route 标签内部传递一个函数(js中函数意味着无限的可能😁, 而且设置了函数之后,标签中的component属性会失效,所以不设置component), 这个函数默认接收参数是整个路由信息。
component 放在 CSSTransition 里面渲染,别忘了把路由信息给component, 不然组件里面有关路由的操作因为找不到路由信息报错。 CSSTransition 提供了很多 API 去设置过渡细节(如代码所示)。

需要引入 animate.cssclassNames 处设置的都是此样式库里面的类。建议根据自己需要的动画效果去这个文件里面复制出来,单独见一个文件,避免不必要的代码打包。

(不作为教程,前端知识冗杂,仅供自己备忘)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本用法 React Router 安装命令如下。 $ npm install -S react-router...
    sunnyghx阅读 4,539评论 0 6
  • 路由 当应用变得复杂的时候,就需要分块的进行处理和展示,传统模式下,我们是把整个应用分成了多个页面,然后通过URL...
    kino2046阅读 326评论 0 0
  • React Router教程 React项目的可用的路由库是React-Router,当然这也是官方支持的。它也分...
    __db84阅读 742评论 0 0
  • React Router教程 React项目的可用的路由库是React-Router,当然这也是官方支持的。它也分...
    张十七y阅读 348评论 0 0
  • React Router教程 React项目的可用的路由库是React-Router,当然这也是官方支持的。它也分...
    惊蛰_5269阅读 307评论 0 0