React_SPA与路由机制
SPA
Single Page Application : 单页面应用,整个应用只加载一个页面(入口页面),后续在与用户的交互过程中,通过 DOM 操作在这个单页上动态更新结构和内容
优点:
- 有更好的用户体验(减少请求和渲染和页面跳转产生的等待与空白),页面切换快
- 重前端,数据和页面内容由异步请求(AJAX)+ DOM 操作来完成,前端处理更多的业务逻辑
缺点:
-
首次进入处理慢
-
不利于 SEO
-
SPA 的页面切换机制
通过把 JavaScript 与 URL 进行结合的方式:JavaScript 根据 URL 的变化,来处理不同的逻辑,交互过程中只需要改变 URL 即可。
/*
http//:www.baidu.com:80/search#hans?name=lll&age=8
*/
前端路由
是一种把 不同URL 与 JavaScript对应逻辑 进行关联的方式
- URL 的变化不会直接发送 HTTP 请求
- 业务逻辑由前端 JavaScript 来完成
目前前端路由主要的模式:
- 基于 URL Hash 路由
- 基于 HTML5 History API 路由
React Router
React Router 提供了多种不同环境下的路由库
- web
基于 web 的 React Router 为:react-router-dom
npm i -S react-router-dom
- native
路由组件
- BrowserRouter 组件 -- history模式
import {BrowserRouter} from "react-router-dom"
<BrowserRouter></app></BrowserRouter>
- HashRouter 组件 -- hash模式
Route 组件
设置应用单个路由信息,<Route path=['/',""] exact component={} />
exact精确匹配模式,非exact模式 匹配所有以 'url' 开头的路由(默认)
Route : render
<Route exact path='/' render={() => <Home items={this.state.items} />} />
Switch 组件
该组件只会渲染首个被匹配的组件
Link 组件
项目内页面跳转 react-router-dom 拦截了实际 a 标签的默认动作,同时把对应的组件显示在指定的位置 #### NavLink 组件 NavLink 与 Link 类似,但是它可以添加选中效果 - activeStyle 当当前 URL 与 NavLink 中的 to 匹配的时候,激活 activeStyle 中的样式 - activeClassName 激活的是 className - isActive 默认情况下, isActive 可以自定义激活逻辑,isActive 是一个函数,返回布尔值非路由组件传参
- withRouter 组件
高阶组件-接收一个组件并返回一个新组件
withRouter(组件) - hooks
- useHistory()
- useLocation()
- useParams()
- useRouteMatch()