Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >React路由器不会拦截HTTP/S请求

React路由器不会拦截HTTP/S请求
EN

Stack Overflow用户
提问于 2021-05-03 17:11:27
回答 2查看 240关注 0票数 1

我对React Router的理解是,一旦单个页面在客户端启动,随后对路由的所有调用都不会转到服务器。它们被React Router拦截。但是为什么我的应用总是向服务器发出HTTP请求呢?尽管有React Router代码?当我在浏览器开发工具上看到网络时,我总是看到为每个"react routed“路由发出一个网络请求。

我测试了这个应用程序,首先启动服务器,然后传递索引文件,然后在客户端渲染完成后停止服务器。然后我尝试从客户端应用程序访问另一个路由,例如"/contactus“,但是请求似乎到达了服务器(现在没有运行),因此客户端没有得到任何文件,浏览器变成空白。我的理解是,一旦客户端完成应用程序的引导,React Router就会拦截所有API调用。

然后,我通过执行函数(“/*”,app.get (req,res) { res.sendFile(path.join(__dirname,"../dist","landing_page.html"));})修改了服务器端代码;

现在,这个应用程序可以工作了。但这违背了React Router的全部目的,因为所有请求都会去往服务器。那么什么是React Router呢?它是否只用于路由而不用于拦截?是否有React Router的任何变体来拦截请求?或者我应该使用像历史API这样的东西?这是我的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {
  BrowserRouter as Router,
  Switch,
  Route,
  Link,
 
} from "react-router-dom";

class App extends React.Component {


  render() {
      return (
      <Router>
            <Switch>
            <Route exact path="/">
              <div className="banner">
                <Banner />
              </div>
            </Route>
          </Switch>
          <Switch>
            <Route exact path="/cloudautomation">
              <div style={{ position: "absolute", top: "15%", zIndex: "-1" }}>
                <CloudAutomation />
              </div>
            </Route>
          </Switch>
          <Switch>
            <Route exact path="/marketingautomation">
              <div style={{ position: "absolute", top: "15%", zIndex: "-1" }}>
                <MarketingAutomation />
              </div>
            </Route>
          </Switch>
          <Switch>
            <Route exact path="/contactus">
              <div style={{ width: "100%" }}>
                <ContactUs />
              </div>
            </Route>
          </Switch>
        </div>
        </Router>
    );
  }
}

ReactDOM.render(<App />, document.getElementById("main"));
EN

回答 2

Stack Overflow用户

发布于 2021-05-03 17:21:09

React-router-dom通常用于防止您的页面在路由通过您自己的网站时重新加载每个资产,从而提供SPA体验。

如果你想拦截请求,你可以使用axios

他们自己的文档中的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Add a request interceptor
axios.interceptors.request.use(function (config) {
    // Do something before request is sent
    return config;
  }, function (error) {
    // Do something with request error
    return Promise.reject(error);
  });

// Add a response interceptor
axios.interceptors.response.use(function (response) {
    // Any status code that lie within the range of 2xx cause this function to trigger
    // Do something with response data
    return response;
  }, function (error) {
    // Any status codes that falls outside the range of 2xx cause this function to trigger
    // Do something with response error
    return Promise.reject(error);
  });
票数 1
EN

Stack Overflow用户

发布于 2021-05-03 20:03:26

有几分正确。

React-router将“拦截”任何呼叫,并随后执行客户端路由。不会对每个请求都有一个服务器调用。但是,某些场景会触发对服务器的调用,这(通常)会导致服务器使用所有(通常)请求的路径的index.js文件进行响应。例如,如果您手动刷新页面。在您的示例中,您似乎正在这样做,因为您似乎没有使用“链接”,而是在地址栏中键入路径。

如果你添加下面的内容;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Link to='/'>Banner</Link>
<Link to='/cloudautomation'>Cloud Automation</Link>
<Link to='/marketingautomation'>Marketing automation</Link>
<Link to='/contactus'>Contact us </Link>

在开始时的Router和Switch之间,您将注意到没有触发任何服务器调用。您还可以对所有路由使用单个交换机组件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67373006

复制
相关文章
React Native的HTTP请求
前言 在一般的手机App中,HTTP请求是一种最常见的获取数据的方式。我们的App要连上广阔的互联网,才能带来一个丰富的世界。那么,在React Native中如何发起HTTP请求呢? 发起网络请求 要从任意地址获取内容的话,只需简单地将网址作为参数传递给fetch方法即可(fetch这个词本身也就是获取的意思): fetch('https://mywebsite.com/mydata.json') Fetch还有可选的第二个参数,可以用来定制HTTP请求一些参数。你可以指定header参数,或是指定使用P
Oceanlong
2018/07/03
1.9K0
React技巧之发出http请求
原文链接:https://bobbyhadz.com/blog/react-send-request-on-click[1]
chuckQu
2022/08/19
7750
React技巧之发出http请求
请求拦截详解
不可操作数据 | 执行方法相关信息 | ResponseBody的返回结果 | http请求信息
派大星在吗
2021/12/06
2.2K0
FastApi请求拦截
我们经常听说请求拦截,那到底什么是请求拦截,请求拦截有什么用呢?今天我们就一起来看一看。
Python研究所
2022/06/17
2.6K0
FastApi请求拦截
k8s之HTTP请求负载分发
对于基于HTTP的服务来说,不同的URL地址经常对应不同的后端服务或者虚拟服务器,通常的做法是在应用前添加一个反向代理服务器Nginx,进行请求的负载转发,在Spring Cloud这个微服务框架中,使用zuul网关实现此功能。
Liusy
2020/11/11
8770
k8s之HTTP请求负载分发
admission webhook 花式玩法 - kinitiras 发送 http(s) 请求
在使用 Admission Webhook 的时候,很可能会涉及到发送 http 请求以获取某些数据。在 v0.1.1 版本中对此进行了支持,本文主要来介绍如何在 kinitiras 中发送 http 请求,如果对 kinitiras 还不熟悉,请参考前篇。
李鹤
2023/03/06
2310
iOS网络--HTTP请求HTTP请求
本文首发于我的个人博客:『不羁阁』 https://bujige.net 文章链接:https://bujige.net/blog/iOS-HTTP-request.html HTTP请求 1.NSURLConnectiong 1.同步GET请求 // 1.创建请求路径(url) NSURL *url = [NSURL URLWithString:@""]; // 2.通过请求路径(url)创建请求对象(request) NSURLRequest *request = [NSUR
程序员充电站
2018/05/31
2K0
Springmvc拦截器拦截Ajax请求
文章目录 1. 拦截器拦截Ajax请求 1.1. 原因 1.2. 解决 1.3. 第一种 拦截器拦截Ajax请求 ## 问题 如果我们在拦截器中定义了拦截器的路径为/user/*这个地址,并且拦截器拦截器之后,如果没有登录,那么重定向到登录界面。但是我们在未登录的前提下使用Ajax异步请求了/user/addUser.do这个地址,出现了拦截器是拦截了,但是并没有重定向到登录界面。 原因 可以参照这篇文章 :http://www.cnblogs.com/dudu/p/ajax_302_found.htm
爱撒谎的男孩
2019/12/31
1.9K0
Spring Boot 请求拦截
在面向对象编程的过程中,我们很容易通过继承、多态来解决纵向扩展。但是对于横向的功能,比如,在所有的 service 方法中开启事务,或者统一记录日志等功能,面向对象的是无法解决的。所以 AOP 其实是面向对象编程思想的一个补充。而过滤器和拦截器都属于面向切面编程的具体实现。
数媒派
2022/12/01
2K0
Spring security 拦截请求
比如说在未登录淘宝时,我们可以访问淘宝的首页,可是在访问购物车时就会跳出登录权限。
Tim在路上
2020/08/04
2.3K0
vue请求拦截案例
import axios from 'axios'; import {getToken} from '@/utils/token' import { Message } from 'element-ui' axios.defaults.baseURL = 'http://127.0.0.1:8080/api/'; //请求拦截器 axios.interceptors.request.use(function(config){ //在发送请求前 config.headers['token']
IT工作者
2022/05/10
4560
JMeter http(s)请求插件jmeter-plugin-httpBinaryFileUpload.jar
https://gitee.com/ishouke/jmeter-plugin-httpBinaryFileUpload
授客
2019/09/10
5110
JMeter http(s)请求插件jmeter-plugin-httpBinaryFileUpload.jar
android WebView拦截请求详解
WebView的基本用法相信大多数android开发者都是会使用的,最简单的就是调用个loadUrl方法,但是记得要在清单文件中添加网络权限。我也简单了写了一个加载百度的,如下图
用户1108631
2019/08/14
4.3K0
Angular 中的请求拦截
在上一篇的文章 Angular 中使用 Api 代理,我们处理了本地联调接口的问题,使用了代理。
Jimmy_is_jimmy
2022/04/15
2.5K0
Angular 中的请求拦截
Java web拦截恶意请求
RequestHolder是获取每次请求的HttpServletRequest对象的工具类。
多凡
2020/02/13
1.2K0
【总结】1023- 如何优雅的管理 HTTP 请求和响应拦截器?
最近重构一个老项目,发现其中处理请求的拦截器写得相当乱,于是我将整个项目的请求处理层重构了,目前已经在项目中正常运行。
pingan8787
2021/07/20
1.3K0
http请求缓存
剁椒鱼鳞
2023/05/30
4280
http请求缓存
android http请求
android开发如果使用sdk23以上会发现之前很多http库都不能用了,原因是sdk23 中已不提供org.apache.http.*,推荐使用 HttpURLConnection,这个API的效率更高,可以减少网络使用,降低耗电量,好处是不少但是没啥好用的封装库,要是还想用Apache HTTP API也是有办法的。
码客说
2019/10/22
8220
发送Http请求
这是第一部分, 主要使用的是AngleSharp: https://anglesharp.github.io/
solenovex
2022/11/24
4.1K0
发送Http请求
http请求下载
@ApiOperation(value = "二维码http方式下载", notes = "二维码http方式下载", httpMethod = "GET") @RequestMapping(value = "qrCode/download/{url}", method = RequestMethod.GET) public void fileHttpDownload(HttpServletResponse response, @PathVariable("url") String url)
Dream城堡
2022/05/10
5920

相似问题

拦截HTTP请求

42

如何拦截ios WKWebView上的所有http(s)请求?

10

如何拦截HTTP请求?

21

拦截传出HTTP请求

10

Java拦截HTTP请求

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文