You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// 1.import { BrowserRouter as Router } from "react-router-dom";// 2.import { HashRouter as Router } from "react-router-dom";importReactfrom'react';import{BrowserRouterasRouter,// HashRouter as Router Switch,Route,}from"react-router-dom";importHomefrom'./pages/Home';importLoginfrom'./pages/Login';importBackendfrom'./pages/Backend';importAdminfrom'./pages/Admin';functionApp(){return(<Router><Routepath="/login"component={Login}/><Routepath="/backend"component={Backend}/><Routepath="/admin"component={Admin}/><Routepath="/"component={Home}/></Router>);}exportdefaultApp;
一、是什么
在单页应用中,一个
web
项目只有一个html
页面,一旦页面加载完成之后,就不用因为用户的操作而进行页面的重新加载或者跳转,其特性如下:改变 url 且不让浏览器像服务器发送请求
在不刷新页面的前提下动态改变浏览器地址栏中的URL地址
其中主要分成了两种模式:
二、使用
React Router
对应的hash
模式和history
模式对应的组件为:这两个组件的使用都十分的简单,作为最顶层组件包裹其他组件,如下所示
三、实现原理
路由描述了
URL
与UI
之间的映射关系,这种映射是单向的,即 URL 变化引起 UI 更新(无需刷新页面)下面以
hash
模式为例子,改变hash
值并不会导致浏览器向服务器发送请求,浏览器不发出请求,也就不会刷新页面hash
值改变,触发全局window
对象上的hashchange
事件。所以hash
模式路由就是利用hashchange
事件监听URL
的变化,从而进行DOM
操作来模拟页面跳转react-router
也是基于这个特性实现路由的跳转下面以
HashRouter
组件分析进行展开:HashRouter
HashRouter
包裹了整应用,通过
window.addEventListener('hashChange',callback)
监听hash
值的变化,并传递给其嵌套的组件然后通过
context
将location
数据往后代组件传递,如下:Router
Router
组件主要做的是通过BrowserRouter
传过来的当前值,通过props
传进来的path
与context
传进来的pathname
进行匹配,然后决定是否执行渲染组件参考文献
https://juejin.cn/post/6870376090297171975#heading-9
https://segmentfault.com/a/1190000023560665
The text was updated successfully, but these errors were encountered: