ReactJS:[Home] 不是 <Route> 组件。<Routes> 的所有子组件都必须是 <Route> 或 <React.Fragment>

doj*_*ker 22 javascript reactjs react-router material-ui react-router-dom

单击“开始测验”按钮时,我试图导航到“/quiz”。

但是,当我编译代码时,我在网站应用程序上收到以下错误:[Home] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>

我是新来的,如果有人能帮助我,我将不胜感激!

这是我的 App.js 代码:

import { BrowserRouter, Routes, Route } from "react-router-dom";
import Footer from "./components/Footer/Footer";
import Header from "./components/Header/Header";
import Home from "./Pages/Home/Home";
import Quiz from "./Pages/Quiz/Quiz";
import "./App.css";
function App() {
  return (
    <BrowserRouter>
      <div className="App" style={{ backgroundImage: "url(./circle.jpg)" }}>
        <Header />
        <Routes>
          <Route exact path="/" component={Home} />
          <Route path="/quiz" component={Quiz} />
          <Home />
        </Routes>
      </div>
      <Footer />
    </BrowserRouter>
  );
}

export default App;

Run Code Online (Sandbox Code Playgroud)

这是我的 Home.js 代码:

import { Button } from "@material-ui/core";
import { Container } from "@material-ui/core";
import { useNavigate } from "react-router-dom";
import "./Home.css";

const Home = () => {
  const navigate = useNavigate();

  const sendSubmit = () => {
    navigate("/quiz");
  };
  return (
    <Container className="content">
      <h1 id="quiz-title">Phishing Quiz</h1>
      <h2 class="question-text">
        Do you think you can beat our phishing quiz?
      </h2>
      <p className="description">
        {" "}
        There are many social engineering attacks on internet however not all of
        them are good enough to trick users. However there are some scams that
        are identical to original websites and usually most of the users get
        tricked by them.
      </p>
      <p className="description">
        Do you think you are smart enough to handle these attacks?
      </p>
      <p className="description">
        We are challenging you with our phishing quiz which will show you
        examples of really good social engineering attacks on internet. We hope
        you can pass!
      </p>
      <p>""</p>
      <Button
        variant="contained"
        color="primary"
        size="large"
        onClick={sendSubmit}
      >
        Start Quiz
      </Button>
    </Container>
  );
};

export default Home;

Run Code Online (Sandbox Code Playgroud)

目前我在 Quiz.js 中只有空代码。

小智 30

首先检查你的react router Dom的版本。当你有react-router-dom V6时会出现这个错误。V6 有许多突破性的变化,所以尝试阅读官方文档看看: https: //reacttraining.com/blog/react-router-v6-pre/ 现在针对你的问题部分 React router v6 介绍路由

航线介绍

v6 中最令人兴奋的变化之一是强大的新元素。这是对 v5 元素的一次相当重大的升级,具有一些重要的新功能,包括相对路由和链接、自动路由排名以及嵌套路由和布局。

  <BrowserRouter>
      <div className="App" style={{ backgroundImage: "url(./circle.jpg)" }}>
        <Header />
        <Routes>
          <Route exact path="/" element={<Home/>} />
          <Route path="/quiz" element={<Quiz/>} />
         
        </Routes>
      </div>
      <Footer />
    </BrowserRouter>
Run Code Online (Sandbox Code Playgroud)

另请检查从 v5 到 v6 的迁移指南 https://github.com/ReactTraining/react-router/blob/f59ee5488bc343cf3c957b7e0cc395ef5eb572d2/docs/advanced-guides/migration-5-to-6.md#relative-routes-and-links


Dre*_*ese 12

仅允许RouteReact.FragmentRoutes组件的子组件,反之亦然。您已经Home在“/”路径上渲染了一个组件,因此请删除无关的<Home />组件。看来您也在使用react-router-domv6,因此Route组件不再通过 arender或prop 渲染组件,它们现在在prop 上将component组件渲染为 JSXelement

<Routes>
  <Route exact path="/" component={Home} />
  <Route path="/quiz" component={Quiz} />
  <Home /> // <-- remove this
</Routes>
Run Code Online (Sandbox Code Playgroud)

<Routes>
  <Route path="/" element={<Home />} />
  <Route path="/quiz" element={<Quiz />} />
</Routes>
Run Code Online (Sandbox Code Playgroud)