【问题标题】:Nested router inside of Gatsby layout componentGatsby 布局组件内的嵌套路由器
【发布时间】:2020-07-21 11:30:23
【问题描述】:

我想知道是否可以在 Gatsby 布局组件中使用嵌套路由?我知道反应到达路由器支持这一点,但我不太确定如何让它在 Gatsby 中工作......

目前我有一个布局组件,其中包含我的网站标题和侧面导航菜单。每个页面都正确加载到布局正文中。

我现在正尝试在我的一个 MDX 页面中创建一个选项卡式界面。

是否可以使用嵌套路由器、嵌套布局组件或任何其他机制来避免在更改页面时重新加载整个正文内容(包括选项卡)?

我希望我也可以将子页面定义为 MDX,并将其引用为要为每个选项卡加载的内容,而无需重新加载我的主要布局组件或当前周围的页面内容。只是好奇这是否可能,或者我是否应该尝试采用不同的方法。

当前布局层次结构

<Root>
    /* AppLayout is static around ALL pages and contains header, navigation, and footer */
    <AppLayout>
        /* PageLayout is the wrapper around each MDX page content (which I want to contain the tabs) */
        <PageLayout>
            {MDX page content}
        </PageLayout>
    </AppLayout>
</Root>

目前,&lt;PageLayout&gt; 在我导航到其他页面时会重新呈现(即使使用&lt;Link&gt; 组件),&lt;AppLayout&gt; 不会。这对我来说确实有意义,因为每个页面都应该替换 &lt;AppLayout&gt; 的内容,但我很好奇是否有办法重组它或使用不同的机制来实现它。

我希望&lt;PageLayout&gt; 在其内容中包含选项卡,但在切换选项卡时不会重新呈现该特定页面中的其余内容。

【问题讨论】:

    标签: reactjs gatsby reach-router


    【解决方案1】:

    据我所知,无论您使用 Gatsby 还是独立的reach-router 实现,它都应该可以工作,因为 Gatsby 的路由从 React 的reach-routing 扩展而来,并添加了一些增强功能。 According to their documentation:

    该组件是@reach/router 的 Link 组件的包装器,它 添加了特定于 Gatsby 的有用增强功能。所有道具都通过了 通过 @reach/router 的 Link 组件。

    Gatsby 的 &lt;Link&gt; 组件可以在预加载、预取资源中链接到内部页面,以便在用户使用此组件导航时获取它们。当链接在视口中时,我们使用 IntersectionObserver 获取低优先级请求,然后在用户可能导航到请求的资源时使用 onMouseOver 事件触发高优先级请求

    【讨论】:

    • 感谢您的想法。在阅读了您的答案后,我确实尝试过此操作,但它仍然会导致我的内部内容重新呈现(我实际上期望如此,所以也许我应该以不同的方式处理整个布局?)...我更新了我的问题以包括“当前布局层次结构”和一些额外的细节,如果有帮助的话。似乎&lt;Link&gt; 没有为每个页面创建新的路由器上下文,而是使用我的&lt;AppLayout&gt; 中层次结构中较高的现有路由器。
    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 2020-04-18
    • 2019-04-16
    • 2018-09-10
    • 2016-09-14
    • 2016-11-12
    • 2015-08-01
    • 2020-01-02
    相关资源
    最近更新 更多