【问题标题】:React routing to endpoint but not rendering content将路由反应到端点但不呈现内容
【发布时间】:2021-04-23 15:51:16
【问题描述】:

我可以路由到另一个端点,但组件内容仅在手动刷新时出现。

我看到有人问过这个问题herehere,并且我一直在查看reactrouter docs 等。解决方案似乎总是“添加withRouter”或“确保将其包装在Router 中。我已经完成了这些事情,但遗憾的是没有地方。

代码如下:

App.js

import { BrowserRouter as Router, Route, Switch } from "react-router-dom";

function App() {
  return (
    <Router>
      <Provider store={store}>
        <div className="App">
          <NavBar />
          <Switch>
            <Route exact path="/" component={Home} />
            <Route path="/account" component={Account} />
          </Switch>
        </div>
      </Provider>
    </Router>
  );
}

NavBar.js

import { BrowserRouter as Router, Link } from "react-router-dom";
import { withRouter } from "react-router";

function NavBar() {
  return (
    <Router>
      <div className="navbar">
        <h3>Connectory</h3>
        <div className="buttons-container">
          <Link>
            <button>Settings</button>
          </Link>
          <Link to="/account"> // successfully redirects to /account, but doesn't render Account page content until refresh
            <button>Account</button>
          </Link>
        </div>
      </div>
    </Router>
  );
}

export default withRouter(NavBar);

编辑:在评论建议后,here's a code sandbox link 和这里是 Account.js 页面:

import React from "react";

export default function Account() {
  return (
    <div>
      <h3>This is the Account page</h3>
    </div>
  );
}

【问题讨论】:

  • 你的代码看起来没问题,尝试创建一个代码沙盒演示,以便我们可以看到全貌
  • 能否请您添加帐户代码以便我们检查它是否正确?
  • @TaghiKhavari here you go
  • @letibelim 添加了!

标签: javascript reactjs react-router react-router-dom


【解决方案1】:

这里的问题是,在您的 Navbar.js 中,当您已经在 App.js 中设置了路由时,您正在重新设置它们。

  <Switch>
    <Route exact path="/" component={Home} />
    <Route path="/account" component={Account} /> // Route for Applicatin set here
  </Switch>

您无需再次执行此操作。请在此处查看。

https://codesandbox.io/s/gracious-germain-7fyry?file=/src/Navbar.js

您的 Nabar 应如下所示:

function NavBar() {
  return (
    <div className="navbar">
      <h3>Connectory</h3>
      <div className="buttons-container">
        <Link to="/">
          <button>Settings</button>
        </Link>
        <Link to="/account">
          <button>Account</button>
        </Link>
      </div>
    </div>
  );
}

【讨论】:

  • 谢谢,这解决了。我很确定我之前尝试过,但收到一条错误消息,提示“您不能在 Router 之外使用 Link”,但也许那时我错误地包装了主 App 组件。
  • 这是编程,事情确实坏了,然后我们修复它们:-)。顺便说一下,从React-router-dom-5 开始,事情发生了一些变化(利用 Hooks 和 Route 设置有点不同,现在性能更高了)。看看吧,你会喜欢的 :-) reactrouter.com/web/guides/quick-start CHEERS
【解决方案2】:

您好,我在您的代码中发现了一个错误,这就是原因,因为它不起作用。

在此组件中,您将路由器注入应用程序的其余部分。

    function App() {
  return (
    <Router>
      <div className="App">
        <NavBar />
        <Switch>
          <Route exact path="/" component={Home} />
          <Route path="/account" component={Account} />
        </Switch>
      </div>
    </Router>
  );
}

在这个中,您将再次注入路由器。这就是为什么不起作用的原因,您只需从 de Navbar 中删除路由器,它就会正常工作。

    function NavBar() {
  return (
    <Router>
      <div className="navbar">
        <h3>Connectory</h3>
        <div className="buttons-container">
          <Link>
            <button>Settings</button>
          </Link>
          <Link to="/account">
            <button>Account</button>
          </Link>
        </div>
      </div>
    </Router>
  );
}

喜欢这个

 function NavBar() {
  return (
      <div className="navbar">
        <h3>Connectory</h3>
        <div className="buttons-container">
          <Link>
            <button>Settings</button>
          </Link>
          <Link to="/account">
            <button>Account</button>
          </Link>
        </div>
      </div>
  );
}

【讨论】:

  • 谢谢! Imran 在上面分享了一个类似的解决方案,您确实是正确的,这就是解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 2017-11-09
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 2022-11-14
相关资源
最近更新 更多