[英]How to 1). put a div , 2). render a component without Route inside <Routes> with React Router in v6 React?
[英]Component Missing when Nested inside of Route in React Router v6
使用 React Router v6 将ChoosePlayer
组件嵌套在Route
中时,
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/players">
<Route element={<ChoosePlayer />} />
// <--- Some dynamically generated routes here for /players/{playerName}
// These inner routes shows a modal in addition to ChoosePlayer in the background
</Route>
</Routes>
</BrowserRouter>
当我们位于 url http://localhost:3000/players
或http://localhost:3000/players/reacher
时, ChoosePlayer
组件不会呈现。
作为ChoosePlayer
http://localhost:3000/chooseplayer
,当我们有
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/chooseplayer" element={<ChoosePlayer />} />
</Routes>
</BrowserRouter>
并在http://localhost:3000/players
将index
添加到其Route
组件时,但这会阻止ChoosePlayer
出现在http://localhost:3000/players/reacher
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/players">
<Route index element={<ChoosePlayer />} />
// <--- Some dynamically generated routes here for /players/{playerName}
// These inner routes shows a modal in addition to ChoosePlayer in the background
</Route>
</Routes>
</BrowserRouter>
为什么它不在第一个示例中呈现? 有没有办法在 React Router v6 中做到这一点? 我认为这种方法适用于 React Router v5。
谢谢!
所以我收集到你想要渲染这个ChoosePlayer
组件,路径是"/players"
,并且在某些"/players/*"
路径上。 在这种情况下,您更多地将ChoosePlayer
视为呈现一组嵌套路由的布局组件。
<BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="/players"> <Route element={<ChoosePlayer />} /> // <--- Some dynamically generated routes here for /players/{playerName} // These inner routes shows a modal in addition to ChoosePlayer in the background </Route> </Routes> </BrowserRouter>
ChoosePlayer
路由缺少用于匹配和渲染的路径。
<BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="/chooseplayer" element={<ChoosePlayer />} /> </Routes> </BrowserRouter>
ChoosePlayer
已匹配并呈现,但不在"/players/*"
路线上并且没有任何嵌套的子路线。
<BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="/players"> <Route index element={<ChoosePlayer />} /> // <--- Some dynamically generated routes here for /players/{playerName} // These inner routes shows a modal in addition to ChoosePlayer in the background </Route> </Routes> </BrowserRouter>
ChoosePlayer
是一个索引路由,当路径恰好为"/players"
时匹配并渲染,但在匹配和渲染其他嵌套路由之一时被排除在渲染之外。
我建议将ChoosePlayer
向上移动到根"/players"
路由中,并为要渲染到的嵌套路由渲染一个Outlet
组件。
例子:
import { Outlet } from 'react-router-dom';
const ChoosePlayer = () => {
// ...any component business logic...
return (
<div /* any container props/styling/etc... */>
{/* Common Choose Players UI */}
<Outlet /> // <-- nested routes render into here
</div>
);
};
...
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/players" element={<ChoosePlayer />} >
// <--- Some dynamically generated routes here for /players/{playerName}
// These inner routes shows a modal in addition to ChoosePlayer in the background
</Route>
</Routes>
</BrowserRouter>
您可以在此处阅读有关布局路线的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.