下面是重现该问题的codesandbox。
我在react-router v6源代码中使用modal example,并且我希望在模态中显示路由的内容。
我的路线定义如下:
<Routes location={state?.backgroundLocation || location}>
<Route path="/" element={<Layout />}>
<Route index element={<Home />} />
<Route path="gallery/:counter" element={<Gallery />} />
<Route path="*" element={<NoMatch />} />
</Route>
</Routes>
{/* Show the modal when a `backgroundLocation` is set */}
{state?.backgroundLocation && (
<Routes>
<Route path="/modal/:counter" element={<Modal />} />
</Routes>
)}
当用户点击Modal
链接时,我想在模态中显示gallery/:counter
路由的内容,但是除了使用<Navigate />
组件之外,我不确定如何触发路由,这会导致整个页面重定向。
1条答案
按热度按时间a8jjtwal1#
你不能同时匹配两个不同的URL路径,浏览器只有一个地址栏和URL,我建议创建一个布局路由组件,它 Package
"/gallery/:counter"
路由,并有条件地将嵌套的路由呈现到Modal
组件中。示例:
Modal
被更新为接受children
prop并将children
* 渲染为 * 模态内容。这是上面的Outlet
被渲染的地方,以便嵌套的路由可以将它们的element
内容渲染为模态。"/gallery/:counter"
布线被包裹在ModalLayout
布局布线中。为了使
counter
状态更容易在路由组件之间共享,并且在主路由和图库路由之间切换时保持不变,我建议将counter
状态从Home
组件移动到另一个布局路由中,该布局路由通过其Outlet
上下文向后代组件提供counter
状态和setter。这 Package 了想要/需要/关心
counter
状态的所有路由,例如Home
和Gallery
组件。第一节第一节第一节第二节第一节第三节第一