1、新建项目命令:
yarn create vite react-router --template react
2、在vsCode中打开项目
3、在vsCode打开命令终端,输入
yarn
4、执行yarn dev启动当前项目
yarn dev
5、删除多余的东西,保留app.jsx和main.jsx文件即可
6、重新打开终端,安装react-router(版本:"react-router-dom": "^6.16.0")
yarn add react-router-dom
import { createBrowserRouter, RouterProvider } from 'react-router-dom'
注意:
createBrowserRouter:创建路由实例在方法中定义路由path和组件的对应关系。
RouterProvider:作为一个组件渲染 并且传入createBrowserRouter执行之后生成的router实例。
const router = createBrowserRouter([
{
path:'/',
element:home
},
{
path:'/login',
element:login
}
])
const Home = () => {
return
Home
}
export default Home
import { createBrowserRouter } from 'react-router-dom'
import About from '../pages/About.jsx'
import Home from '../pages/Home.jsx'
import Login from '../pages/Login.jsx'
const router = createBrowserRouter([
{
path: '/',
element:
},
{
path: '/login',
element:
},
{
path: '/about',
element:
}
])
export default router
import router from './router/index'
运行结果与上面一致
注意:利用createBrowserRouter创建的路由属于history模式
import { createBrowserRouter } from 'react-router-dom'
const router = createBrowserRouter([
])
注意:利用createHashRouter创建的路由属于hash模式
import { createHashRouter } from 'react-router-dom'
const router = createHashRouter([
])
注意:最简单的区别就是路由访问的时候一个有#一个没有。history模式需要后端的支持,hash模式不需要。
import { useNavigate } from 'react-router-dom'
const navigate = useNavigate()
import { useNavigate } from 'react-router-dom'
const Home = () => {
const navigate = useNavigate()
const goAbout = () => {
navigate('/about')
}
return
}
export default Home
注意:路由跳转过去后,直接销毁上一页路由,点击返回无法返回上一页。
navigate('/', { replace: true })
注意:查询只字符串传参的方式比较简单,参数的形式以问号拼接到地址后面。
navigate('/about?id=123')
import { useSearchParams } from 'react-router-dom'
const [params] = useSearchParams()
let id = params.get('id')
navigate('/about?id=123&name=简隋英')
import { useSearchParams } from 'react-router-dom'
const [params] = useSearchParams()
let id = params.get('id')
let name = params.get('name')
navigate('/跳转页面/参数数据')
navigate('/about/123')
import { useParams} from 'react-router-dom'
let params = useParams()
//该代码运行结果
{ id: 123 }
let id = params.id
场景:在我们做的很多管理后台系统中,通常我们都会设计一个Layout组件,在它内部实现嵌套路由。
const Board = () => {
return Board
}
export default Board
// 二级路由引入
import Article from '../pages/second/Article.jsx'
import Board from '../pages/second/Board.jsx'
const router = createBrowserRouter([
{
path: '/',
element: ,
children: [
{
path: 'article',
element:
},
{
path: 'board',
element:
}
]
},
{
path: '/login',
element:
},
{
path: '/about/:id',
element:
}
])
import { Outlet, useNavigate } from 'react-router-dom'
import { Outlet, useNavigate,Link } from 'react-router-dom'
运行结果:
注意:Link上的路由是,原始路由+二级路由地址
1、引入NotFund页面
import NotFund from '../pages/NotFund'
2、路由页面设置*
3、配置NotFund组件内容
const NotFund = () => {
return 404
}
export default NotFund
4、执行结果