如何添加多个 Outlet 组件 react router dom V6?

Posted

技术标签:

【中文标题】如何添加多个 Outlet 组件 react router dom V6?【英文标题】:How to add more than one Outlet component react router dom V6? 【发布时间】:2022-01-22 10:17:52 【问题描述】:

我正在使用react-router-dom V6,我想知道是否可以同时添加多个 Outlet 组件,因为我希望有一个部分可替换和一个页脚

这就是我的尝试

<Route path = "/" element=<AppToolBar/> >
            <Route path = "/AboutMe" element=<AboutMe />>
              <Route path="/AboutMe" element=<AboutMeIntro /> />
              <Route path="/AboutMe" element=<Footer /> />
            </Route>
</Route>

但它不起作用,因为它不能识别彼此之间的差异,所以它只会渲染两次第一个而不是渲染第一个和第二个。有任何想法吗 ?也许我忽略了一些重要的事情

这是它的渲染方式

更新

答案肯定成功了

 <Route path = "/" element=<AppToolBar/> >
    <Route path="/AboutMe" element=( <> <AboutMe /> <Footer /> </> ) >
      <Route path="/AboutMe" element=<AboutMeIntro /> />
    </Route>
  </Route>

【问题讨论】:

【参考方案1】:

如果我正确理解了您的问题,您希望呈现一个带有条件子级的 about 页面,并且无条件地(或有条件地但与路线/路径分开)一个页脚。

假设AppToolBar 正在为嵌套的"/" 子路由渲染Outlet,通过让"/AboutMe" 路由为其嵌套的子路由渲染Outlet 来继续抽象。使用 AboutMe 包装器组件渲染 Footer

<Route path="/" element=<AppToolBar/> >
  <Route
    path="/AboutMe"
    element=(
      <>
        <AboutMe />
        <Footer />
      </>
    )
  >
    <Route path="/AboutMe" element=<AboutMeIntro /> />
  </Route>
</Route>

如果你想有条件地渲染Footer,那么有条件地渲染。

例子:

<Route path="/" element=<AppToolBar/> >
  <Route
    path="/AboutMe"
    element=(
      <>
        <AboutMe />
        condition && <Footer />
      </>
    )
  >
    <Route path="/AboutMe" element=<AboutMeIntro /> />
  </Route>
</Route>

您可以通过将 JSX 抽象为一个新的包装器组件来稍微清理一下:

const AboutMeWrapper = () => (
  <>
    <AboutMe />
    condition && <Footer />
  </>
);

...

<Route path="/" element=<AppToolBar/> >
  <Route path="/AboutMe" element=<AboutMeWrapper /> >
    <Route path="/AboutMe" element=<AboutMeIntro /> />
  </Route>
</Route>

或者将页脚抽象AboutMe组件。

例子:

const AboutMe = () => 
  // business logic

  return (
    <>
      <div /* AboutMe layout styling */ >
        ...
        <Outlet />
        ...
      </div>
      condition && <Footer />
    </>
  );
;

...

<Route path="/" element=<AppToolBar/> >
  <Route path="/AboutMe" element=<AboutMe /> >
    <Route path="/AboutMe" element=<AboutMeIntro /> />
  </Route>
</Route>

【讨论】:

让我检查一下,但首先对于您的第一个问题,是的 AppToolBar 正在呈现关于我,然后关于我正在呈现中间组件,在这种情况下是“介绍”但我不知道现在在哪里渲染页脚,因为我不能在同一个上做两个。让我先检查你的答案,看看我能做什么。谢谢你,我会在一分钟内告诉你它是否有效。

以上是关于如何添加多个 Outlet 组件 react router dom V6?的主要内容,如果未能解决你的问题,请参考以下文章

当我在路由中使用渲染时反应返回 Outlet 组件

ng2中router-outlet用法

并行运行多个查询动画

如何在同一个 React 组件中管理多个 setState 调用?

角 |导航时将参数传递给多个组件

react-router-dom V6