【问题标题】:React router V5 updating URL but not refreshing pageReact 路由器 V5 更新 URL 但不刷新页面
【发布时间】:2020-12-08 13:15:03
【问题描述】:

react router 不会更新视图,而是更改 url。

Navbar.js:

import React from "react";
import logo from "../Assets/imgs/Logo/WHITELOGOkatman 1.png";
import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";
class Navbar extends React.Component {
  render() {
    return (
      <div className="header">
        <img className="logo" src={logo} alt="logo" />
        <Router>
          <nav>
            <ul className="nav_links">
              <Link to="/">
                <li>Home</li>
              </Link>
              <Link to="/process">
                <li>Process</li>
              </Link>
              <Link to="/career">
                <li>Career</li>
              </Link>
              <Link to="/about">
                <li>About</li>
              </Link>
            </ul>
          </nav>
        </Router>
      </div>
    );
  }
}
export default Navbar;

这是我的 App.js

import React from "react";
import "./App.css";
import "./Components/Styles/style.css";
import "bootstrap/dist/css/bootstrap.css";
import Navbar from "./Components/Navbar";
import About from "./Components/About";
import Home from "./Components/Home";
import Career from "./Components/Career";
import Footer from "./Components/Footer";
import notFoundPage from "./Components/404";
import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";
function App() {
  return (
    <div className="App">
      <Navbar />
      <Router>
        <Switch>
          <Route exact path="/" component={Home} />
          <Route path="/about" component={About} />
          <Route path="/career" component={Career} />
          <Route path="/notfound" component={notFoundPage} />
        </Switch>
      </Router>
      <Footer />
    </div>
  );
}

export default App;

我尝试过的:

  1. 我已尝试使用 withRouter 导出我在路由器内部渲染的所有组件。页面仍然没有重新加载。
  2. 我尝试将路由器组件设置为*组件,但没有成功。
  3. 我已尝试将 li 项设置为链接,但这并没有达到我想要的效果。
  4. 我尝试了一些解决方案,例如在链接标签顶部添加一个开关,然后从路由器标签中移除开关,但仍然没有任何效果。
  5. 我也尝试过切换路线的顺序以在路线的尽头做家。还是什么都没有。

【问题讨论】:

  • 你可以为这个问题制作一个 CodeSandBox 或类似的东西吗?一个最小的可重现示例。
  • 这个问题加 1。我记得我以前经历过。

标签: javascript reactjs react-router


【解决方案1】:

请尝试以下两件事:

  • 首先确保您的 Route 的顺序如下:
<Switch>
  <Route path="/about" component={About} />
  <Route path="/career" component={Career} />
  <Route path="/notfound" component={notFoundPage} />
  <Route exact path="/" component={Home} />
</Switch>
  • 删除&lt;Nav&gt; 中的&lt;Router&gt; 并使用&lt;Router&gt;&lt;App&gt; 中的所有内容包裹起来...像这样:
function App() {
  return (
    <Router>
      <div className="App">
        <Navbar />
          <Switch>
            <Route exact path="/" component={Home} />
            <Route path="/about" component={About} />
            <Route path="/career" component={Career} />
            <Route path="/notfound" component={notFoundPage} />
          </Switch>
        <Footer />
      </div>
    </Router>
  );
}

我认为值得注意的是,根据我的经验,我已经意识到&lt;Router&gt; 只需要 1 个孩子。所以在你的情况下,你使用了两次&lt;Router&gt;


我可能还想通过将您的 &lt;Router&gt; 放入 index.js 文件来进一步简化它:

ReactDOM.render(
   <Router>
      <App />
   </Router>,
   containerElement
);

【讨论】:

  • 它没有抛出任何错误?你能检查一下控制台看看有没有错误吗?
  • 没有任何错误。甚至根本没有关于这个的警告..
  • 这很奇怪。你能试试上面的建议吗?我刚刚添加了一些我认为可能是这种情况的内容,因为没有错误我有点建议我们经常使用一些正常的方法来解决这个问题。
  • 是的!那行得通,但为什么?为什么我使用 标签而没有路由器包围它?
  • 记住&lt;Nav&gt; 将在&lt;App&gt; 中使用,它被包裹在&lt;Router&gt;.. 所以最后,&lt;App&gt; 中使用的所有内容都可以访问&lt;Router&gt;