umi路由动画
一、安装react-transition-group
npm i react-transition-group
二、在src目录下创建layout文件夹,与pages同级
三、layout文件夹中创建index.tsx
在index.tsx中复制如下代码
import React, { useState, useEffect } from 'react'
import { TransitionGroup, CSSTransition } from 'react-transition-group'
import { history as Router, withRouter } from 'umi'
import { Switch } from 'react-router-dom'
import './index.less'
const routerType = {
'POP': 'back',
'PUSH': 'in',
'REPLACE': 'in'
}
export default withRouter(({ location, children, history }) => {
return (
<TransitionGroup style={{ height: '100%' }} className='transition_wrapper' childFactory={(child) => (
React.cloneElement(child, { classNames: routerType[history.action] })
)}>
<CSSTransition key={location.pathname} appear timeout={3000}>
<Switch location={location}>{(children as any)?.props?.children}</Switch>
</CSSTransition>
</TransitionGroup>
)
})
在index.less文件中复制如下代码
.dg-enter {
transform: translate(100%, 0);
}
.dg-enter-active {
transition: 3s;
transform: translate(0);
}
.dg-enter-done {
transform: translate(0);
}
.dg-exit-active {
transition: 1s;
transform: translate(-100%, 0);
}
.back-enter-active {
transition: all 3s;
transform: translate(0, 0) !important;
}
.back-enter-done {
transform: translate(0, 0) !important;
}
.back-enter {
z-index: 5 !important;
transform: translate(-100%, 0);
}
.back-exit-active {
opacity: 0;
transition: all 3s;
transform: translate(100%, 0) !important;
}
四、在pages文件夹中创建自己需要的页面
login文件夹中有index.tsx
wish文件夹中有index.tsx中点击可以跳转到登录页面
五、在umirc.ts文件中
六、npm start重新启动项目
七、演示效果
umi路由动画效果