【发布时间】:2021-07-26 02:32:18
【问题描述】:
我对 React Router 的理解是,一旦单个页面在客户端被引导,所有后续对路由的调用都不会转到服务器。它们被 React Router 拦截。但是为什么我的应用总是向服务器发出 HTTP 请求呢?尽管有 React Router 代码?当我在浏览器开发工具上看到 Networks 时,我总是看到每个“react routed”路由都有一个网络请求。
我首先启动服务器,然后传递索引文件,然后在客户端渲染完成后停止服务器来测试应用程序。然后我尝试从客户端应用程序访问另一条路由,例如“/contactus”,但请求似乎转到了服务器(现在没有运行),因此客户端没有得到任何文件并且浏览器变为空白。我的理解是,一旦应用程序的客户端引导完成,React Router 就会拦截所有 API 调用。
然后我通过执行 app.get("/*", function (req, res) { res.sendFile(path.join(__dirname, "../dist", "landing_page.html")); });
现在该应用程序可以运行了。但这违背了 React Router 的全部目的,因为所有请求都发送到服务器。 那么什么是 React Router 呢?是只做路由不做拦截吗?是否有拦截请求的 React Router 变体?还是我使用类似历史 API 的东西? 这是我的代码。
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"));
【问题讨论】:
-
react-router 是用来导航的,不是拦截请求
-
如果你想拦截你应该使用
axios包 -
@KetZoomer。导航和拦截有什么区别。你能给我举个例子吗?
-
看看Kseikyo的回答
标签: reactjs react-router