一、认识ReactRouter
一个路径path对应一个组件component,当我们在浏览器中访问一个path,对应的组件会在页面进行渲染
创建路由项目
// 创建项目
npx create router-demo
// 安装路由依赖包
npm i react-router-dom
// 启动项目
npm run start
简单的路由小案例
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { createBrowserRouter, RouterProvider } from 'react-router-dom'
const router = createBrowserRouter([
{
// http://localhost:3000/login
path:'/login',
element:<div>登录</div>
},
{
// // http://localhost:3000/article
path:'/article',
element:<div>文章</div>
}
])
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<RouterProvider router={router}></RouterProvider>
</React.StrictMode>
);
正式创建路由
const Article = () => {
return <div>我是文章页</div>
}
export default Article
const Login = () => {
return <div>我是登录页</div>
}
export default Login
2. 然后创建src/router/index.js 路由配置文件
import Login from "../page/Login";
import Article from "../page/Article";
import { createBrowserRouter } from "react-router-dom";
const router = createBrowserRouter([
{
path:'/login',
element:<Login />
},
{
path: '/article',
element:<Article />
}
])
export default router
import React from 'react';
import ReactDOM from 'react-dom/client';
import router from "./router"
import { RouterProvider } from 'react-router-dom'
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<RouterProvider router={router}></RouterProvider>
</React.StrictMode>
);
二、路由导航
什么是路由导航
声明式导航与编程式导航
声明式导航
指通过<Link />组件描述要跳转到哪里,比如后台管理系统的左侧菜单。
<Link to="/article">文章</Link>
编程式导航
通过useNavigate钩子得到导航方法,然后通过调用方法以命令式的方式进行路由跳转,比如登录请求完毕之后跳转就可以选择这种方式。
import { Link, useNavigate } from "react-router-dom"
const Login = () => {
const navigate = useNavigate()
return (
<div>
我是登录页
{/* 声明式导航 */}
<Link to="/article">go article</Link>
{/* 编程式导航 */}
<button onClick={() => navigate('/article')}>go article</button>
</div>
)
}
export default Login
声明式导航<router-link to=”/article”></router-link>
导航传参
searchParams传参
navigate('/article?id=1001&name=jack')
// 别忘了 useSearchParams要导入
const [params] = useSearchParams()
const id = params.get('id')
const name = params.get('name')
params传参
navigate('/article/1001/name')
//别忘了 useParams要导入
const params = useParams()
const id = params.id
const name = params.name
{
path: '/article/:id/:name',
element:<Article />
}
三、嵌套路由
嵌套路由配置
// Layout/index.js
import { Link, Outlet } from "react-router-dom"
const Layout = () => {
return (
<div>
<div> 我是一级路由Layout </div>
<Link to="/board">面板</Link>
<br/>
<Link to="/about">关于</Link>
{/* 二级路由出口 */}
<Outlet/>
</div>
)
}
export default Layout
// About/index.js
const About = () => {
return (
<div> 我是二级路由About </div>
)
}
export default About
// Board/index.js
const Board = () => {
return (
<div> 我是二级路由Board </div>
)
}
export default Board
路由配置文件
{
path:'/',
element: <Layout />,
children:[
{
path:'board',
element: <Board/>
},
{
path:'about',
element:<About />
}
]
},
默认二级路由
{
path:'/',
element: <Layout />,
children:[
{
// path:'board',
index: true,
element: <Board/>
},
{
path:'about',
element:<About />
}
]
},
四、404路由配置
const NotFound = () => {
return (
<div>
<h1>404 Not Found</h1>
</div>
)
}
export default NotFound
路由配置
{
path:'*',
element:<NotFound/>
}
五、两种路由模式
createBrowserRouter — history模式
附-项目技术点
配置src别名路径@
路径解析配置
const path = require('path')
module.exports = {
webpack:{
alias:{
'@':path.resolve(__dirname, 'src')
}
}
}
"scripts": {
"start": "craco start",
"build": "craco build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
路径联想配置
{
"compilerOptions":{
"baseUrl": "./",
"paths":{
"@/*":[
"src/*"
]
}
}
}
数据Mock
json–server实现数据Mock
安装完毕之后在项目根目录新建server/data.json并放入数据内容
"server": "json-server ./server/data.json --port 8888"
原文地址:https://blog.csdn.net/Michelle209/article/details/134627911
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_14085.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。