【发布时间】:2019-08-09 08:18:32
【问题描述】:
编辑:
我忘了提到我的网站包含从这个模板构建的大约 25k 页面。 Derek Nguyen 的答案适用于页面数量较少的小型网站,但当扩大规模时,matchPath 数据存储在 JS 中,导致捆绑包大小很大。 (对我来说大约 3.1mb!)
挑战
我需要使用 createPage 创建一个页面,其中包含一个子路由系统,其中默认路由构建为静态 HTML,但任何其他路由都是客户端专用的。
问题
我有一个模板组件,用于在 createPage 方法中生成静态 HTML,还有一个位于 pages/ 目录中的组件,用于为仅限客户端的路由分配一个 matchPath。
在最新版本的 Gatsby 上,模板组件呈现为默认路由,但随后“页面”组件呈现为仅限客户端的组件,当我只希望子路由到时,导致整页重新呈现渲染,因为父路由中有数据需要持久化。
在我的脑海中,有两个组件和两个路由器似乎是错误的,但我想不出任何其他方法来实现我想要实现的目标。
这是我的路由设置示例:
createPage使用的模板
<Router>
<ContainerComponent
path={urlFromGraphQL}
>
<DefaultRoute
default
/>
</ContainerComponent>
</Router>
/pages 中的仅客户端组件
<Router>
<ContainerComponent
path="/some-route/:slug/:id"
>
<DefaultRoute
default
/>
<SecondTabRoute
path="second-tab-route"
/>
<ThirdTabRoute
path="third-tab-route"
/>
</ContainerComponent>
</Router>
我也复制了codesandbox 中的行为。确保转到https://hkhbb.sse.codesandbox.io/test/foo/bar 以查看正确的输出。
我已经在 github 上创建了一个 issue 关于这个但还没有回复。
【问题讨论】:
标签: javascript reactjs routing gatsby reach-router