如何在完成css路由跳转动画样式的同时完成umi路由鉴权?

具体解决步骤

1、在src的目录下,和page同级,新建一个wrappers文件夹(这个名称是固定的),在文件夹下新建 Auth.tsx文件,
在这里插入图片描述
2、在文件里面的写入以下内容:

import {Redirect} from 'umi'
export default function Auth(props:any) {
//获取本地缓存 localStorage的值
  const isLogin = localStorage.getItem('role')
//如果这个值存在就返回正常内容
  if(isLogin){
    return (
      <div>
        {props.children}
      </div>
    );
  }else {
  //如果这个值存在就重定向到登录页
    console.log('跳登录')
      return (  <Redirect to='/login' />)
  }
}


3、在配置路由的地方加上 wrappers: [‘@/wrappers/auth’],需要拦截的都必须添加,如图
在这里插入图片描述

4.在完成路由鉴权之后,接下来就是来完成css动画路由跳转

在src目录下创建layouts文件夹,并在文件夹下创建两个文件
在这里插入图片描述
在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 (
   <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>
)
})

在pages文件中创建自己需要的页面,页面中需要体现路由跳转
在这里插入图片描述
页面1:home.jsx

import React from 'react'
import { history } from 'umi'
import './index1.less'
// import { FloatButton } from 'antd'

export default function Home() {
  return (
    <div>
      home页面
      <button onClick={() => { history.push('/index') }}>跳转到index页面</button>
    </div>
  )
}

页面2:index.tsx

import './index1.less'
import { history } from 'umi';


export default function Index() {
  return (
    <div className='index'>
      index
      <button onClick={() => { history.push('/home') }}>跳转到home页面</button>
    </div>
  );
}

样式:index.less

.index,#root,.home{
    height: 100%;
}
.index{
    background-color: pink;
}
.home{
    background-color: antiquewhite;
}

将umirc.ts文件中配置路由
在这里插入图片描述

在我们配置路由的时候切记一定要首先配置css动画样式的文件路径,否则当我们进行路由跳转的时候,是没有路由动画的。接下来就跟我图中一样,就可以直接添加你想添加的文件路由。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
umi中,可以使用插件`@umijs/plugin-persisted-state`来实现在切换由时缓存之前页面的数据。该插件使用了`localStorage`来持久化存储数据,以便在切换页面后能够重新加载。 以下是如何使用`@umijs/plugin-persisted-state`插件进行数据缓存的步骤: 1. 安装插件: ```shell npm install @umijs/plugin-persisted-state --save ``` 2. 在`.umirc.js`或`config/config.js`文件中配置插件: ```javascript export default { plugins: [ ['@umijs/plugin-persisted-state', { storage: 'localStorage', // 存储方式,可选localStorage、sessionStorage、cookie,默认localStorage key: 'yourKey' // 存储的键名,默认为 "persistedState" }] ] } ``` 3. 在需要缓存数据的组件中使用`usePersistedState`钩子来获取和设置缓存数据: ```javascript import { usePersistedState } from 'umi'; function MyComponent() { const [data, setData] = usePersistedState('yourKey', initialValue); // 使用data进行渲染和操作 // 使用setData更新data的值 return <div>{data}</div>; } ``` 在上述代码中,`usePersistedState`钩子接收两个参数:键名和初始值。它会返回一个数组,第一个元素是缓存的数据,第二个元素是更新数据的函数。通过使用`usePersistedState`,你可以在切换由后获取之前页面的数据,并在组件中使用它。 注意,`@umijs/plugin-persisted-state`插件默认使用`localStorage`来存储数据,如果需要使用其他存储方式,可以在配置中进行设置。 希望以上内容对你有所帮助!如有任何疑问,请随时提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程雪员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值