react-router V6 版本的使用(自己封装了 Redirect,使用 useRoute 等)

react-router V6 版本的使用(自己封装了 Redirect等)

IndexRouter.js 使用useRoute 做全局路由的搭建,包括嵌套路由,路由重定向,路由拦截(自己封装),路由懒加载(做了一个简单的封装)等

import React from 'react';
import {useRoutes} from "react-router-dom";
import LazyLoad from "./Lazyload";
import NewsSandBox from "../views/NewsSandBox/NewsSandBox";
import AuthComponent from "./AuthComponent";

function IndexRouter(props) {
  const routerElement = useRoutes([
    //  重定向操作
    {
      path: "/",
      element: <AuthComponent>
        <NewsSandBox></NewsSandBox>
      </AuthComponent>,

      children:[
        //  二级路由的重定向
        {
          path:"/",
          element:  LazyLoad("/home/Home")
        },


        {
          path: "home",
          element: LazyLoad("/home/Home")
        },

        {
          path: "user-manage",
          element: LazyLoad("/userlist/Userlist"),
          children:[
            {
              path: "",
              element: LazyLoad("/userlist/Userlist")
            },
            {
              path: "list",
              element: LazyLoad("/userlist/Userlist")
            }
          ]
        },

        {
          path: "right-manage",
          // element: LazyLoad("/rolelist/Rolelist"),
          children: [
            {
              path: "role",
              element: LazyLoad("/right-manage/rolelist/Rolelist"),
              children:[
                {
                  path: "",
                  element: LazyLoad("/right-manage/rolelist/Rolelist"),
                },
                {
                  path: "list",
                  element: LazyLoad("/right-manage/rolelist/Rolelist"),
                }
              ]
            },
            {
              path: "right",
              element: LazyLoad("/right-manage/rightlist/Rightlist"),
              children:[
                {
                  path: "",
                  element: LazyLoad("/right-manage/rightlist/Rightlist"),
                },
                {
                  path: "list",
                  element: LazyLoad("/right-manage/rightlist/Rightlist"),
                }
              ]
            }
          ]
        },

        // 配置 无权限(404)
        {
          path: "*",
          element: LazyLoad("/nopermission/Nopermission"),
        }


      ]

    },

    {
      path: "/login",
      element: LazyLoad("/login/Login")
    },


    {
      path: "/sandbox",
      element: LazyLoad("/NewsSandBox/NewsSandBox"),
    }

  ]);


  return (
      routerElement
  );

}

function IsAuth() {
  return localStorage.getItem("token") ? true : false;
}

export default IndexRouter;

AuthComponent.js 实现路由拦截,看有没有 token,有token正常访问,没有 token 进入 login 页面

import Redirect from "./Redirect";
function AuthComponent({children}) {
  const isLogin = localStorage.getItem("token");
  return isLogin ? children : <Redirect to="/login"/>
}

export default AuthComponent;

LazyLoad.js :因为只使用 React.lazy 的话,会报警告,需要搭配 Suspense 中的fallback 使用,所以就进行了简单封装

// 路由懒加载的封装
import React from "react";


const LazyLoad = (path) => {
  const Comp = React.lazy(() => import('../views'+path));
  return(
      <React.Suspense fallback={<>加载中</>}>
        <Comp></Comp>
      </React.Suspense>
  )
}

export default LazyLoad

Redirect.js :V6版本移除了 Redirect ,所以为了使用方便,封装了一个简单的 Redirect

import React, {useEffect} from 'react';
import {useNavigate} from "react-router-dom";

function Redirect({to}) {
  const navigate = useNavigate();
  useEffect(() => {
    navigate(to, {replace: true});
  })
  return null;
}

export default Redirect;
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Router DOM v6 是一个用于 React 应用程序的路由库。它提供了一种在应用程序中进行页面导航和管理的方式。 下面是一个简单的使用教程来帮助你开始使用 React Router DOM v6: 1. 安装 React Router DOM v6: ```shell npm install react-router-dom@next ``` 注意:v6 目前仍然是预发布版本,所以需要添加 `@next` 后缀来安装最新版本。 2. 在你的应用程序的入口文件(通常是 `index.js`)中导入所需的组件: ```jsx import { BrowserRouter as Router, Route, Link } from 'react-router-dom'; ``` 3. 使用 `Router` 组件将你的应用程序包裹起来,并定义你的路由规则: ```jsx ReactDOM.render( <Router> <Route path="/" component={App} /> </Router>, document.getElementById('root') ); ``` 这个例子中,所有匹配 `/` 路径的组件都将渲染 `App` 组件。 4. 在你的应用程序的其他组件中使用 `Link` 组件来创建导航链接: ```jsx import { Link } from 'react-router-dom'; function Navigation() { return ( <nav> <ul> <li> <Link to="/">Home</Link> </li> <li> <Link to="/about">About</Link> </li> <li> <Link to="/contact">Contact</Link> </li> </ul> </nav> ); } ``` 这个例子中,点击链接将会导航到对应的路径。 5. 在你的应用程序的其他组件中使用 `Route` 组件来定义不同路径下的组件渲染: ```jsx import { Route } from 'react-router-dom'; function App() { return ( <div> <h1>My App</h1> <Route exact path="/" component={HomePage} /> <Route path="/about" component={AboutPage} /> <Route path="/contact" component={ContactPage} /> </div> ); } ``` 这个例子中,`HomePage` 组件将会在 `/` 路径下渲染,`AboutPage` 组件将会在 `/about` 路径下渲染,`ContactPage` 组件将会在 `/contact` 路径下渲染。 这只是 React Router DOM v6 的一些基本用法,还有很多其他功能和概念可以学习。你可以查阅官方文档以获取更多详细的信息和示例代码:https://reactrouter.com/docs/en/v6

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值