📜  错误:[Home] 不是<Route>零件.的所有子组件<Routes>必须是<Route>或者<React.Fragment>(1)

📅  最后修改于: 2023-12-03 15:12:33.477000             🧑  作者: Mango

错误:[Home] 不是零件

这个错误通常会在使用 React Router 时出现。它表明某个组件(这里是 [Home])被要求作为 <Routes> 组件的子组件,但它并不是 <Route> 组件或 <React.Fragment> 的子组件。

原因

<Routes>React Router v6 中的一个根组件,它用来渲染所有的路由。和其他常规的 React 组件一样,它只能渲染 <Route><React.Fragment> 的子组件。

在使用 React Router 时,我们往往会像这样定义路由:

import { Routes, Route } from 'react-router-dom'

function App() {
  return (
    <Routes>
      <Route path="/" element={<Home />} />
      <Route path="/about" element={<About />} />
    </Routes>
  )
}

在这个例子中,<Routes> 组件的子组件是两个 <Route> 组件,它们用来匹配不同的路由,并渲染相应的组件。

但如果我们像下面这样定义路由:

import { Routes } from 'react-router-dom'

function App() {
  return (
    <Routes>
      <Home />
      <Route path="/about" element={<About />} />
    </Routes>
  )
}

这时,<Home> 组件并不是 <Route><React.Fragment> 的子组件,因此就会出现 [Home] 不是<Route>零件 的错误。

解决办法

要解决这个问题,我们需要将所有作为 <Routes> 子组件的组件都包裹在 <Route><React.Fragment> 中。

import { Routes, Route } from 'react-router-dom'

function App() {
  return (
    <Routes>
      <Route path="/" element={<Home />} />
      <Route path="/about" element={<About />} />
    </Routes>
  )
}

这样就能确保所有的组件都是 <Routes> 的合法子组件,避免出现错误。