自学内容网 自学内容网

【react-router】react-router v6 路由基本配置

首先需要先下载 react-router-dom

npm install react-router-dom

在这里插入图片描述
新建router文件夹,设置路由配置:
src/router/index.tsx

import  { lazy } from "react";
import { Navigate } from "react-router-dom";

const Login = lazy(() => import('../pages/Login'));  
const Null404 = lazy(() => import('../components/404'));    
const Layout = lazy(() => import('../pages/Layout'));        
const Home = lazy(()=>import('../pages/Home'));          
const AdminOperate = lazy(()=>import('../pages/Admin/AdminOperate')) 


const Router = [
  {
      path:'/',
      element: <Navigate to="/home"/>
  },
  {
      path: '/',
      element: <Layout />,
      children:[
          //路由嵌套
          { path: '/home', element: <Home />},
          {path: '/admin/adminOperate',element: <AdminOperate />}
      ]
  },
  {
      path: '/login',
      element: <Login/>
  },
  {
      path: '/*',
      element: <Null404 />
  }
]

export default Router

这只是基本的路由配置,如果有需要比如路由拦截、权限问题需再进行设置;
main.tsx文件

import React from "react";
import { createRoot } from "react-dom/client";
import App from "./App.tsx";
import { BrowserRouter } from "react-router-dom";

createRoot(document.getElementById("root")!).render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>
);

App.tsx文件

import { useRoutes } from "react-router-dom";
import "./App.css";
import routes from './router'

function App() {

  const elements = useRoutes(routes)
  return elements;
}

export default App;

Layout.tsx文件
src/pages/Layout/index.tsx

import { Outlet } from "react-router-dom";

export default function Layout() {
  return (
    <div className="c-Layout-index">
      左侧菜单xxxx
      <div className="appMainWrap">
        头部区域xxxx
        <div className="appMain">
          <Outlet />
        </div>
      </div>
    </div>
  );
}

  • useRoutes是用来定义路由表的;
  • Navigate路由重定向,之前5版本的重定向是使用Redirect,现在6用Navigate;
  • outlet是应用于嵌套路由的占位的;
  • NavLink可以实现路径的跳转;

这里我在Layout文件下加了NavLink跳转去实现组件的切换;

<NavLink to={"/home"}> 去home</NavLink><br />
<NavLink to={"/admin/adminOperate"}> 去adminOperate</NavLink>

这里会报错(如下):
在这里插入图片描述
在定义路由的时候我使用了lazy,但是并没有使用Suspense,控制台就会报错;
Suspense 和 lazy 在 React 中通常一起使用,但它们各自有不同的作用。理解它们的关系和用途有助于更好地管理和优化你的应用;
lazy

  • 作用: lazy 用于懒加载组件。它允许你动态导入组件,而不是在应用启动时一次性加载所有组件。
  • 用法: const MyComponent = lazy(() => import(‘./MyComponent’));

Suspense

  • 作用: Suspense 用于在组件加载过程中显示回退内容(如加载指示器)。它提供了更好的用户体验,避免了空白页面的出现。

  • 用法

    <Suspense fallback={<div>Loading...</div>}>
      <MyComponent />
    </Suspense>
    

虽然 Suspense 和 lazy 经常一起使用,但它们并不是必须一起使用。不过,为了处理懒加载组件的加载状态,通常推荐一起使用它们。

如果你只使用 lazy 而不使用 Suspense,React 会在组件加载完成之前抛出一个错误,导致应用崩溃。因此,通常不推荐这样做,(报错如上截图)。
如果你只使用 Suspense 而不使用 lazy,Suspense 将不会有任何效果,因为它需要与懒加载组件一起工作。
通常情况下,建议将 Suspense 和 lazy 一起使用,以确保在组件加载过程中提供良好的用户体验。
suspense的字面意思就是悬而不决,用在平时开发中,就可以理解为还没有完成的事,你不知道啥时候完成。也就是异步,异步加载组件,异步请求数据。
详解可点击查看这篇博客

附上结合上述代码的截图:
在这里插入图片描述
react-router-dom官网


原文地址:https://blog.csdn.net/m0_69892739/article/details/144030106

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!