实现效果
在src下新建一个layouts的文件夹,在layouts文件夹下新建两个文件
index.less和index.tsx
在index.less中写如下代码
.in-enter-active{ // 入场的过渡状态类 transition: all 3s; transform: translate(0, 0)!important; } .in-enter-done { // 入场的动画的结束状态类 // opacity: 0.5; transform: translate(0, 0) !important; } .in-enter { // 入场的动画开始状态类 z-index: 5 !important; transform: translate(100%, 0); } .in-exit-active { // 离场动画 opacity:0; transition: all 3s; transform: translate(-100%, 0)!important; } .in-exit { // 离场动画开始 // transform: translate(0, 0)!important; } .in-exit-done { // 离场动画结束 } // 返回动画 .back-enter-active{ // 入场的过渡状态类 transition: all 3s; transform: translate(0, 0)!important; } .back-enter-done { // 入场的动画的结束状态类 // opacity: 0.5; 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; } .back-exit { // 离场动画开始 // transform: translate(0, 0)!important; } .back-exit-done { // 离场动画结束 }
在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' import './index.less' const routerType = { 'POP': 'back', 'PUSH': 'in', 'REPLACE': 'in' } export default withRouter(({ location, children, history }) => { return ( <div> <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> </div> ) })
在page下面创建两个文件为Fen和Zhu,每一个文件夹下创建一个index.tsx文件夹
Fen文件夹下面的index.tsx写如下代码
import React from 'react' import { history } from 'umi' export default function index() { return ( <div style={{width:"800px",height:"800px",background:"red"}} onClick={()=>{ history.push("\child") }} > 这是分页面 </div> ) }
Zhu文件夹下面的index.tsx写如下代码
import React from 'react' import { history } from 'umi' export default function index() { return ( <div style={{width:"800px",height:"800px",background:"blue"}} onClick={()=>{ history.push("/fen") }} > 这事主页 </div> ) }
在项目的.umirc.ts文件夹中配置上routes,代码如下
routes: [ { path: '/', component: '@/layouts/index.tsx', routes: [ { path: '/child', component: '@/pages/Zhu'}, { path: '/fen', component: '@/pages/Fen'}, ] } ],