1. Introdução
- Em um aplicativo de página única, como você não atualiza o navegador após trocar de página? Para resolver este problema, existem dois métodos, ou seja
hash路由模式
,history路由模式
, ereact router
as duas rotas usam esses dois modos de roteamento.
2. Diferença
-
HashRouter
-
Com base no
hash
modo: O princípio do salto de página é usar o modo delocation.hash
,location.replace
e para conseguir o mesmo.vue router
hash
-
Mais feio: Depois do nome de domínio, emendar primeiro
/#
e depois emendar o caminho, ou seja, usar o ponto de ancoragem para realizar o salto da rota. Como: http://www.dzm.com/#/xx
-
-
BrowserRouter
-
Com base
history
no padrão: O princípio do salto de página é usar para adicionar dois novos objetosHTML5
ao objeto global do navegador , incluindo , e para implementar o mesmo padrão.history
API
history.pushState
history.replaceState
vue router
history
-
Ainda mais elegante: concatene caminhos diretamente. Como: http://www.dzm.com/xx
-
O back-end precisa processar a solicitação: depois de mudar a rota, o caminho da interface da solicitação mudará e o back-end precisará cooperar com o processamento.
-
Compatibilidade: Navegadores com versões inferiores podem não suportá-lo. Atualmente, todos os navegadores populares no mercado devem suportá-lo. Você pode usá-lo com confiança, a menos que seja um caso especial.
-
3. Cenários de uso
-
HashRouter
- Implantação do projeto na intranet: como
to B
o projeto, o projeto utilizado pelo pessoal comercial da empresa, etc.
- Implantação do projeto na intranet: como
-
BrowserRouter
- Projetos implantados na rede pública: Para
to C
projetos e projetos voltados ao público,url
a estética do caminho é obviamente melhor, mas o back-end precisa ser processado, mas atualmenteto
é usado basicamente em todos os lugares, exceto em circunstâncias especiais.
- Projetos implantados na rede pública: Para
4. Uso
-
Instalação, em anexo: uso detalhado de roteamento
# 默认安装最新版本,当前是 6.x $ npm install --save react-router-dom
-
index.tsx
import React from 'react' import { // HashRouter as Router, // hash模式 BrowserRouter as Router, // history模式 Route, Switch, } from 'react-router-dom' import Home from '../containers/home' const BasicRouter = () => ( <Router> <Switch> <Route exact path="/" component={ Home} /> </Switch> </Router> ) export default BasicRouter