React新版本路由

news/2024/7/15 19:20:09 标签: react.js, 前端

与老版本5.x对比

  1. 内置组件的变化:移除<Switch/> ,新增 <Routes/>
  2. 语法:component={组件} ==>  element={<组件/>}
  3. 新增hook:useParamsuseNavigateuseMatch

history和哈希的使用和5.x版本一样

<BrowserRouter>

<HashRouter>

import React from 'react';
import ReactDOM from 'react-dom/client'
import App from './App'
import { BrowserRouter } from 'react-router-dom'

const root = ReactDOM.createRoot(document.getElementById('root'))

root.render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>
)

App.jsx 中

import React from 'react'
import { NavLink, Routes, Route } from 'react-router-dom'
import Page1 from './pages/Page1'
import Page2 from './pages/Page2'

export default function App() {
  return (
    <div>
            {/* 路由链接 */}
            <NavLink className="list-group-item" to="/Page1">Page1</NavLink>
            <NavLink className="list-group-item" to="/Page2">Page2</NavLink>
            {/* 注册路由 */}
            <Routes>
               <Route path='/Page1' element={<Page2/>} />
               <Route path='/Page2' element={<Page2/>} />
            </Routes>
    </div>
  )
}

<Switch>被移除,替代者:<Routes>
<Routes>和<Switch>一样,如果匹配上了,往下就不会再匹配了,相当于一个 if 语句,如果其路径与当前 URL 匹配,则呈现其对应的组件。
<Routes> 和 <Route>要配合使用,且必须要用<Routes>包裹<Route>。
<Route caseSensitive> 属性用于指定:匹配时是否区分大小写(默认为 false)。
当URL发生变化时,<Routes> 都会查看其所有子 <Route> 元素以找到最佳匹配并呈现组件 。
<Route> 也可以嵌套使用,且可配合useRoutes()配置 “路由表” ,但需要通过 <Outlet> 组件来渲染其子路由。

src/routes/index.js

export default [
  // 路由表
  {
    path: '/Page1 ',
    element: <Page1 />
  },
  {
    path: '/Page2',
    element: <Page2 />
  },
  {
    path: '/',
    element: <Navigate to='/Page2' />
  },
  {
    path: '/home',
    element: <Home />,
    children: [
      {
        path: 'news',
        element: <News />
      },
      {
        path: 'message',
        element: <Message />
      }
    ]
  },


]

App.jsx

import React from 'react'
import { useRoutes } from 'react-router-dom'
import routes from './routes/index';

export default function App() {
  
  const element = useRoutes(routes)
 
  return (
    <div>
         {element}
    </div>
  )
}


Home.jsx

import React from 'react'
import { NavLink, Outlet } from 'react-router-dom';

export default function Home() {
  return (
    <div>
      <div>
        <NavLink className="list-group-item" to="news">News</NavLink>
        <NavLink className="list-group-item" to="message">Message</NavLink>
        {/* 指定路由组件呈现的位置 */}
        <Outlet />
      </div>
    </div>
  )
}

在v5中,NavLink高亮使用组件标签中的activeClassName属性,当你点击NavLink标签时,加哪个样式的类名, 在v6版本中,想要实现自定义的类名,需要把className的值写成一个函数

再v6中使用路由懒加载 

import { lazy, Suspense } from "react";
...
  {
    path: ' ',
    element: (
      <Suspense fallback={<h2>加载中....</h2>}>
        <lazy(() => import("../page/LazyTest"))/>
      </Suspense>)
  },
 
...


http://www.niftyadmin.cn/n/177819.html

相关文章

nginx配置详解

一.nginx常用命令1.Windows(1).查看nginx的版本号nginx -v(2).启动nginxstart nginx(3).快速停止或关闭nginxnginx -s stop(4).正常停止或关闭nginxnginx -s quit(5).配置文件nginx.conf修改重装载命令nginx -s reload2.Linux(1).进入 nginx 目录中cd /usr/local/nginx/sbin(2)…

禅道bug统计钉钉通知之封装-支持轮询读取配置文件维护N个项目的通知

一、环境配置 克隆项目:git clone;cd 到项目文件夹内:cd DDtalk;建立虚拟环境:python3 -m venv venv;启用虚拟环境 linux: . ./venv/bin/activate;windows: ``安装项目所需第三方库:pip install -r requirements.txt;如有引入新库,请使用 pip freeze > requirements.tx…

VUEX【路由权限管理方案】

笔者想说:vuex无非就是把要共享的数据记录下来&#xff0c;然后通过mutations去修改定义的state&#xff0c;异步的操作要在通过action。然后就是如何在js文件中和vue文件中使用这些方法&#xff0c;和拿到这些数据。因为小项目的话&#xff0c;不用分模块也可以写&#xff0c;…

基于jsp+ssm+springboot的社区维修平台【设计+论文+源码】

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

OSI七层模型以及TCP/IP四层模型

OSI七层模型OSI是Open SystemInterconnection 的所缩写&#xff0c;意思是“开放式系统互联”。OSI模型把网络通信的工作分为7层&#xff0c;从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。OSI只是存在于概念和理论上的一种模型&#xff0c;它的…

按键消抖的两种方法--中断延迟工作与定时器

按键消抖的两种方法–中断延迟工作与定时器 文章目录按键消抖的两种方法--中断延迟工作与定时器中断延迟工作1.相关结构体2.接口函数初始化延迟工作调度延迟工作取消调度3.模板4.代码实现定时器1.相关结构体2.接口函数init_timer 函数add_timer 函数del_timer 函数del_timer_sy…

【雪天鱼】(2) PYNQ_Z2从Vivado到SDK开发流程

文章目录一、Vivado中手动添加Pynq-Z2板卡文件二、Block Design2.1 新建工程2.2 Block design三、SDK开发3.1 Create Platform Project3.2 Create application project四、下载验证Date: 2023/3/23 Author: 雪天鱼 一、Vivado中手动添加Pynq-Z2板卡文件 在xilinx官网下载pynq…

入职字节外包一个月,我还是选择了离职!

有一种打工人的羡慕&#xff0c;叫做“大厂”。真是年少不知大厂香&#xff0c;错把青春插稻秧。但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂的“…