开发者问题收集

React Router v6 错误:<Routes> 的所有子组件都必须是 <Route> 或 <React.Fragment>

2022-03-03
6054

以下REECT路由代码可能在React路由器V5中起作用,但是在React路由器V6

640261521

中给出以下错误它在React Router V6?

261037621 中起作用。
2个回答

Player 组件应由 element 属性上的 Route 组件呈现,而不是作为 Route 的子组件呈现。

<BrowserRouter>
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/players">
      {players.map((player) => (
        <Route
          key={player.name}
          path={`/players/${player.name}`}
          element={<Player player={player} />}
        />
      ))}
    </Route>
  </Routes> 
</BrowserRouter>
Drew Reese
2022-03-03

您应该将路由映射到其父路由中。 例如:

   <Route path="/players">
     {players.map((player) => (
         <Route exact key={player.name} path={`/players/${player.name}`}>
            <Player player={player} />
         </Route>
       );
     )}
   </Route>

但是,如果您想渲染动态播放器,请不要将上述代码用于此目的,因为如果您使用动态 player.name,这不是最佳方法。在您的代码中,您将为每个播放器创建每条路由。 因此,请使用以下代码:

<Route path="/players">
   <Route exact path={":playerName"} element={<Player/>} />
</Route>

在 Player 组件中,从参数中提取 playerName,例如:

let { playerName } = useParams();
Asad Haroon
2022-03-03