文章来源:尚硅谷B站文档,内补充些文字图片便于更好理解
5.1. 相关理解
5.1.1. SPA的理解
1.单页Web应用(single page web application,SPA)。
2.整个应用只有一个完整的页面。
3.点击页面中的链接不会刷新页面,只会做页面的局部更新。
4.数据都需要通过ajax请求获取, 并在前端异步展现。
5.1.2. 路由的理解
1.什么是路由?
1.一个路由就是一个映射关系(key:value)
2.key为路径, value可能是function或component
2.路由分类:后端路由、前端路由
1.后端路由:
1)理解: value是function, 用来处理客户端提交的请求。
2)注册路由: router.get(path, function(req, res))
3)工作过程:当node接收到一个请求时, 根据请求路径找到匹配的路由, 调用路由中的函数来处理请求, 返回响应数据
2.前端路由:
1)浏览器端路由,value是component,用于展示页面内容。
2)注册路由:
3)工作过程:当浏览器的path变为/test时, 当前路由组件就会变为Test组件
路由的基本使用
1.明确好界面中的导航区、展示区
2.导航区的a标签改为Link标签
<Link to="/xxxxx">Demo</Link>
3.展示区写Route标签进行路径的匹配
<Route path='/xxxx' component={Demo}/>
4.的最外侧包裹了一个<BrowserRouter>或<HashRouter>
5.2.1. 内置组件
react-router-dom相关API
1.<BrowserRouter>//history
2.<HashRouter> //hash
3.<Route> //路由组件
展示区写Route标签进行路径的匹配
<Route path='/xxxx' component={Demo}/>
4.<Redirect> //设置默认路径
<Redirect to="/xxx"> xxx为设置的默认显示路径
5.<Link> //路由跳转 类似于JS中<a></a>标签
导航区的a标签改为Link标签
<Link to="/xxxxx">Demo</Link>
6.<NavLink> //实现路由链接的高亮,通过activeClassName指定样式名 下方有详细说明NavLink
7.<Switch> //提高路由匹配效率(单一匹配) 下方有详细说明Switch
NavLink
//Home组件无高亮 About组件有高亮
<NavLink activeClassName="demo" className='list-group-item ' to="/home">Home</NavLink><br />
<NavLink className='list-group-item ' to="/about">About</NavLink>
Switch
import React, { Component } from "react"; //按需引入React中内容
import { Route,NavLink} from "react-router-dom" //按需引入react-router-dom
import Home from "./component/Home"; //引入Home 组件
import About from "./component/About"; //引入About 组件
import Test from "./component/Test"; //引入Test 组件
export default class App extends Component {
render() {
return (
<div>
{/* 标题 */}
<div>
<h3>React Router Demo</h3>
</div>
{/* 导航 */}
<div>
<div style={{ width: '100px' }}>
//实现路由链接的高亮,通过activeClassName指定样式名
<NavLink activeClassName="demo" className='list-group-item ' to="/home">Home</NavLink><br />
<NavLink className='list-group-item ' to="/about">About</NavLink>
</div>
</div>
<div>
<Route path="/home" component={Home} />
<Route path="/about" component={About} />
//引入Test 但注意这里使用的的/about路径
<Route path="/about" component={Test} />
</div>
</div>
);
}
}
运行界面显示
要想避免这种情况出现,课使用
1.引入Swich
2.包裹路由组件,进行样式隔离
//1引入Swich
import { Route,NavLink,Switch} from "react-router-dom"
//2包裹路由组件 进行样式隔离
<div>
<Switch>
<Route path="/home" component={Home} />
<Route path="/about" component={About} />
<Route path="/about" component={Test} />
</Switch>
</div>
Test样式被隔离