【问题标题】:React Router Switch not showing anything反应路由器交换机没有显示任何东西
【发布时间】:2021-10-05 15:57:08
【问题描述】:

我正在尝试在 react 中创建一个网站,并正在使用 router-dom 来显示正确的 url。

我有一个导航栏,它使用 Link to="" 链接到 about 页面,然后使用 Switch 和 Route 显示正确路径的组件,但它不起作用。

不确定我是否在这里遗漏了任何内容,但我无法显示任何组件。

这是我的 PageContainer

import React from "react";
import { Route, Switch } from "react-router-dom";

import Alphabet from "./Alphabet";
import About from "./About";


export default class PageContainer extends React.Component {
  render() {
    return (
        <section className="pagecontainer">
          <Switch>

            <Route exact path="/omoss">
              <About />
            </Route>
            <Route exact path="/">
              <Alphabet />
            </Route>
          </Switch>
        </section>
    );
  }
}

这是我的导航栏

import React from "react";
import { Link } from "react-router-dom";

export default class Navbar extends React.Component {
  render() {
    return (
        <section>
          <section className="navbar">
            <Link to="/">Hem</Link>
            <Link to="/omoss">OM OSS</Link>
          </section>
        </section>
    );
  }
}

更新:

  • 从上述两个组件中删除了BrowserRouter
  • 将 App.js 更改为以下内容。

App.js

import React from "react";
import "./App.css";

import { BrowserRouter } from "react-router-dom";

import Navbar from "./components/Navbar";
import PageContainer from "./components/PageContainer";

function App() {
  return (
    <BrowserRouter>
      <section className="App">
        <Navbar />
        <PageContainer />
      </section>
    </BrowserRouter>
  );
}

export default App;

仍然无法正常工作。 url 发生变化,但组件不显示。

更新 2

当我删除了在Switch 中显示在PageContainer 中但不在Route 中的其他两个组件时,我想我解决了这个问题。我在上传之前已经删除了它们,但在我的代码中忘记了它们

【问题讨论】:

  • 导航栏中不需要路由器

标签: javascript reactjs react-router-dom


【解决方案1】:

您有两个单独的&lt;BrowserRouter /&gt; 组件,每个组件都有自己的状态。我建议您将&lt;BrowserRouter /&gt; 组件移动到&lt;Navbar /&gt;&lt;PageContainer /&gt; 的共同祖先,以便它们可以共享相同的历史对象。

例如,从组件中删除 BrowserRouter 并将其放置在组件层次结构中的较高位置。现在,&lt;Navbar /&gt;&lt;PageContainer /&gt; 都在同一个&lt;BrowserRouter /&gt; 的范围内

function App() {
  return (
     <BrowserRouter>
        <Navbar />
        <PageContainer />
     </BrowserRouter>
  );
}

【讨论】:

  • 啊,我明白了!如何将&lt;BrowserRouter /&gt; 移动到可以从两者中使用的组件?那会是什么样子?
  • 其次,如果打算使用 *嵌套路由,* 则需要问题范围之外的另一种方法。否则,您的根文件(接替您的入口文件)将是应该包装在路由器中的注释祖先节点。一个例子:` const Root = () => ( ) `
  • 我编辑了我的答案,并举例说明了如何实现。
  • 我把它改成了那个。您可以在原始帖子上看到我的更新编辑。但由于某种原因仍未显示
  • 从纯粹的反应角度来看,代码看起来不错,所以肯定有别的东西在起作用。您使用的是哪种开发服务器?您还可以分享您遇到的错误。
【解决方案2】:

尝试在App.js中添加BrowserRouter

import React from "react";
import "./App.css";
import { BrowserRouter } from "react-router-dom";

import Navbar from "./components/Navbar";
import PageContainer from "./components/PageContainer";

function App() {
  return (
    <BrowserRouter>
      <section className="App">
        <PageContainer />
        <Navbar />
      </section>
    </BrowserRouter>
  );
}

export default App;

【讨论】:

  • 然后我得到这个错误:不能在Router之外使用Link,如果我删除BrowserRouter
  • 你的Navbar组件不是包裹在BrowserRouter里面吗?在某些父组件中
  • 我的 App.js 有两个组件 NavbarPageContainer。第二个里面有BrowserRouter,但在App.js中没有。如果我将 Navbar 从 App.js 移动到 BrowserRouter 内部,那么我也许可以使用上面的示例?
  • 将上面的帖子更新为我认为您的意思。虽然仍然没有显示。我将BrowserRouter 添加到App 并将其从前两个组件中删除
  • 我更新了我的答案,发现问题出在哪里,除了错误地使用BrowserRouter。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 1970-01-01
相关资源
最近更新 更多