# *React-router v6* 版本学生管理系统课堂笔记
## 快速搭建服务器
这里我们选择使用 *json-server* 来快速搭建一个服务器
*npm* 地址:*https://www.npmjs.com/package/json-server*
首先 *npm init* 初始化一个服务器的目录,然后安装 *json-server* 依赖,之后创建 *db.json*,该文件就是我们的数据文件
```json
{
"students": [
{
"name": "xiejie",
"age": "18",
"phone": "333-444-555",
"email": "xiejie@gmail.com",
"education": "adsfasfd",
"graduationschool": "asdfasfd",
"profession": "asdfasdf",
"profile": "asdfasfdasdf",
"id": 1
},
{
"name": "yajing",
"age": "34",
"phone": "123-345-678",
"email": "yajing@hotmail.com",
"education": "fasdfasfd",
"graduationschool": "fasfasdf",
"profession": "sdfasdfafd",
"profile": "asdfasdf",
"id": 3
},
{
"name": "xizhi",
"age": 47,
"phone": "13112341234",
"email": "1234567@qq.com",
"education": "硕士",
"graduationschool": "北京大学",
"profession": "前端开发工程师",
"profile": "大家好!",
"id": 2
}
],
"classes" : [
{
"id" : 1,
"name" : "前端01班",
"description" : "这是一个积极向上的班级"
},
{
"id" : 2,
"name" : "前端02班",
"description" : "这也是一个非常积极向上的班级"
}
]
}
```
之后在 *package.json* 中添加一条命令:
```js
"json:server":"json-server --watch db.json"
```
最后就可以启动服务器了:
```js
npm run json:server
```
## 快速搭建整个管理系统
因为目前还没有学习组件库,我们选择使用 *Bootstrap*
这里我们使用的模板地址:*https://v3.bootcss.com/examples/starter-template/#*
因为我们用了 *bootstrap* 相关的样式类,所以我们需要引入 *Bootstrap*,我们这里选择使用 *CDN* 的方式来引入
*https://www.bootcdn.cn/twitter-bootstrap/*
可以在 *index.html* 中添加如下的代码
```html
```
## *React-router v6* 路由总结
### 组件
- BrowserRouter:整个前端路由以 history 模式开始,包裹根组件
- HashRouter:整个前端路由以 hash 模式开始,包裹根组件
- Routes:类似于 v5 版本的 Switch,主要是提供一个上下文环境
- Route:在 Route 组件中书写你对应的路由,以及路由所对应的组件
- path:匹配的路由
- element:匹配上该路由时,要渲染的组件
- Navigate:导航组件,类似于 useNavigate 的返回值函数,只不过这是一个组件
- NavLink:类似于 Link,最终和 Link 一样,会被渲染为 a 标签,注意它和 Link 的区别,实际上就是当前链接,会有一个名为 active 的激活样式,所以一般用于做顶部或者左侧导航栏的跳转
### *Hooks*
- useLocation:获取到 location 对象,获取到 location 对象后,我们可以获取 state 属性,这往往是其他路由跳转过来的时候,会在 state 里面传递额外的数据
- useNavigate:调用之后会返回一个函数,通过该函数可以做跳转。
- useParams:获取动态参数
## 补充内容
### *useRoutes*
使用示例如下:
```react
function Router(props) {
return useRoutes([
{
path: "/home",
element: ,
},
{
path: "/about",
element: ,
},
{
path: "/add",
element: ,
},
{
path: "/detail/:id",
element: ,
},
{
path: "/edit/:id",
element: ,
},
{
path: "/",
element:
}
]);
}
export default Router;
```
### 嵌套路由
直接在 useRoutes 进行 chilren 属性的配置即可,类似于 vue-router,children 对应的是一个数组,数组里面是一个一个路由对象
```react
{
path: "/about",
element: ,
children : [
{
path : "email",
element :
},
{
path : "tel",
element :
},
{
path : "",
element:
}
]
},
```
之后,使用 Outlet 组件,该组件表示匹配上的子路由组件渲染的位置。