demo:表示点击首页,显示Home组件内容,点击关于显示About组件内容
// 引入两个组件
import Home from './Home'
import About from './About'
import { BrowserRouter, Link, Routes, Route } from 'react-router-dom'
// 进行路由配置
function App () {
return (
// 声明当前要用一个非hash模式的路由
{/* 用来指定跳转的组件 */}
首页
关于
{/* 路由出口 路由对应的组件会在这里进行渲染 */}
{/* 指定路径和组件的对应关系 path代表路径 element代表组件 */}
}>
}>
)
}
包裹整个应用,一个react应用只需要使用一次
两种常用Router: HashRouter和BrowerRouter
模式 | 实现方式 | 路由url表现 |
---|---|---|
HashRouter | 监听url hash值实现 | http://localhost:3000/#/about |
BrowerRouter | h5的 history.pushState API实现 | http://localhost:3000/about |
推荐使用BrowerRouter模式
指定导航链接,完成路由跳转
to属性指定路由地址,实际上就是一个a链接
类似于vue的router-link
提供一个路由出口,组件内部会存在多个内置的Route组件,满足条件的路由会被渲染到组件内部
类似与vue的router-view
用于指定导航链接,完成路由匹配
path属性用来指定匹配的路径地址,element属性指定要渲染的组件
实现步骤:
import { useNavigate } from 'react-router-dom'
function Login () {
// 跳转到关于页
const nagigate = useNavigate()
function goAbout () {
// 累积跳转
// nagigate('/about')
// 替换跳转,不能返回
nagigate('/about', { replace: true })
}
return (
login
)
}
传递参数:使用searchParams传参,使用params传参
searchParams传参
nagigate('/about?id=1')
let [params] = useSearchParams()
let id = params.get('id')
例如:
import { useNavigate } from 'react-router-dom'
function Login () {
const nagigate = useNavigate()
function goAbout () {
nagigate('/about?id=10010', { replace: true })
}
return (
login
)
}
export default Login
import { useSearchParams } from "react-router-dom"
function About () {
let [params] = useSearchParams()
let id = params.get('id')
return (
about---------{id}
)
}
export default About
注意:如果传递参数两个相同的情况,则以第一个为准
例如:
nagigate('/about?id=10010&age=18&id=12222', { replace: true })
则获取的id为10010,不是12222
params传参
nagigate('/about/10010')
let [params] = useParams()
let id = params.id
如果需要使用params传参
则需要如下设置路由
}>
路由跳转
import { useNavigate } from 'react-router-dom'
function Login () {
const nagigate = useNavigate()
function goAbout () {
nagigate('/about/10', { replace: true })
}
return (
login
)
}
export default Login
获取参数
import { useParams, useSearchParams } from "react-router-dom"
function About () {
let pathParams = useParams()
let id = pathParams.id
return (
about---------{id}
)
}
export default About
实现步骤:
配置路由地方:
// 引入两个组件
import Login from './Login'
import Layout from './Layout'
import Board from './Board'
import Article from './Article'
import { BrowserRouter, Link, Routes, Route } from 'react-router-dom'
// 进行路由配置
function App () {
return (
}>
}>
}>
}>
)
}
export default App
二级路由地方
import { Outlet, useNavigate } from 'react-router-dom'
function Layout () {
return (
Layout
{/* 二级路由出口 */}
)
}
export default Layout
设置默认二级路由:
实现步骤:
function App () {
return (
}>
{/* }> */}
}>
}>
}>
)
}
当所有的路由没有匹配时,默认匹配
}>
function App () {
return (
}>
{/* }> */}
}>
}>
}>
}>
)
}
权限管理,不同的用户路由不同
import { BrowserRouter, Routes, Route, useRoutes } from 'react-router-dom'
import Layout from './pages/Layout'
import Board from './pages/Board'
import Article from './pages/Article'
import NotFound from './pages/NotFound'
// 1. 准备一个路由数组 数组中定义所有的路由对应关系
const routesList = [
{
path: '/',
element: ,
children: [
{
element: ,
index: true, // index设置为true 变成默认的二级路由
},
{
path: 'article',
element: ,
},
],
},
// 增加n个路由对应关系
{
path: '*',
element: ,
},
]
// 2. 使用useRoutes方法传入routesList生成Routes组件
function WrapperRoutes() {
let element = useRoutes(routesList)
return element
}
function App() {
return (
)
}
export default App