https://umijs.org/zh-CN/docs/routing#wrappers

通过指定高阶组件 wrappers 达成效果。
如下,src/pages/user

  1. import React from 'react'
  2. function User() {
  3. return <>user profile</>
  4. }
  5. User.wrappers = ['@/wrappers/auth']
  6. export default User

然后在 src/wrappers/auth 中,

  1. import { Redirect } from 'umi'
  2. export default (props) => {
  3. const { isLogin } = useAuth();
  4. if (isLogin) {
  5. return <div>{ props.children }</div>;
  6. } else {
  7. return <Redirect to="/login" />;
  8. }
  9. }


这样,访问 /user,就通过 useAuth 做权限校验,如果通过,渲染 src/pages/user,否则跳转到 /login,由 src/pages/login 进行渲染。


wrappers

  • Type: string[]

配置路由的高阶组件封装。

  1. export default {
  2. routes: [
  3. { path: '/user', component: 'user',
  4. wrappers: [
  5. '@/wrappers/auth',
  6. ],
  7. },
  8. { path: '/login', component: 'login' },
  9. ]
  10. }

然后在 src/wrappers/auth 中,

  1. import { Redirect } from 'umi'
  2. export default (props) => {
  3. const { isLogin } = useAuth();
  4. if (isLogin) {
  5. return <div>{ props.children }</div>;
  6. } else {
  7. return <Redirect to="/login" />;
  8. }
  9. }

这样,访问 /user,就通过 useAuth 做权限校验,如果通过,渲染 src/pages/user,否则跳转到 /login,由 src/pages/login 进行渲染。