zoukankan      html  css  js  c++  java
  • react-router-dom中的BrowserRouter和HashRouter

     

    HashRouter包裹下访问根服务:假设为 localhost:3000/

     1 import { HashRouter as Router, Route, Redirect } from 'react-router-dom';  
     2 // as的作用为将HashRouter重命名为Router,这样的好处是在反复测试HashRouter和BrowserRouter时,可以免去组件修改
     3 
     4 import Home from './pages/Home/index';
     5 import Hooks from './pages/Hooks/index';
     6 
     7 export default function App() {
     8   return (
     9     <Router>
    10       <Route path="/">
    11         <Redirect to="/home" />
    12       </Route>
    13       <Route path="/home" component={Home} />
    14       <Route path="/hooks" component={Hooks} />
    15     </Router>
    16   )
    17 }

    操作一: 浏览器直接输入localhost:3000/
    结果: 路由自动变为localhost:3000/#/home,可正常访问.

    操作二: 浏览器直接输入localhost:3000/#/hooks
    结果: 可正常访问

    将HashRouter更改为BrowserRouter

    1 import { BrowserRouter as Router, Route, Redirect } from 'react-router-dom';  // 使用BrowserRouter

    操作一: 浏览器直接输入localhost:3000/
    结果: 路由自动变为localhost:3000/home,可正常访问

    操作二: 浏览器直接输入localhost:3000/hooks
    结果: 浏览器无法获得正确的结果,Cannot GET /hooks

    操作二: 浏览器直接输入localhost:3000/home
    结果: 浏览器无法获得正确的结果,Cannot GET /home

    操作三: 浏览器直接输入localhost:3000/成功后,点击内容<Link to="home">Home</Link>
    结果: 可成功跳转

    那么问题来了:为什么HashRouter可以直接访问路径,而BrowserRouter会出现找不到路由的情况?为什么HashRouter在前端跳转就能成功?

    服务器路由: browserRouter, 前端路由: hashRouter

    browserRouter

    如果前端使用了browserRouter,每次改变路由时,会向服务器发送请求,因为服务器未配置对应的路径指向对应的文件,自然导致出现404的情况.(对于初始化页面,即路由为/时,不会发送请求)

    因此在使用browserHistory需要再加一层服务器配置(node/nginx),让前端发送的请求映射到对应的html文件上.

    hashRouter

    由于hashRouter会在路径上添加/#/,而/#/后面的所有都不会发送到服务器端,即对于服务器而言,路径依旧是localhost:3000,路由切换在前端完成。

    但是官方会更推荐使用browserRouter,貌似是因为其构建于H5的History API,比起hashRouter,它多出了更多的方法操控url

    转载自:https://www.cnblogs.com/soyxiaobi/p/11096940.html

  • 相关阅读:
    最挑战程序员的9大任务,你都干过哪些?
    最挑战程序员的9大任务,你都干过哪些?
    .NET版开源日志框架Log4Net详解
    .NET版开源日志框架Log4Net详解
    .NET版开源日志框架Log4Net详解
    IT人永远不老,老程序员价值何在?
    IT人永远不老,老程序员价值何在?
    IT人永远不老,老程序员价值何在?
    JS 对象封装的常用方式
    JS 对象封装的常用方式
  • 原文地址:https://www.cnblogs.com/yangzhiqiang/p/11574566.html
Copyright © 2011-2022 走看看