编辑:我忘了提到我的网站包含从这个模板构建的大约 25k 页面。Derek Nguyen 的回答将适用于页面数量较少的小型网站,但是当扩大规模时,matchPath
数据将存储在 JS 中,导致捆绑包大小很大。(对我来说大约 3.1mb!)
挑战
我需要创建一个页面,createPage
其中包含一个子路由系统,其中默认路由构建为静态 HTML,但任何其他路由都是客户端专用的。
问题
我在方法中有一个用于静态 HTML 生成的模板组件createPage
,还有一个pages/
目录中的组件,用于为仅限客户端的路由分配一个matchPath
to。
在最新版本的 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>
我还复制了这个代码框中的行为。确保转到https://hkhbb.sse.codesandbox.io/test/foo/bar以查看正确的输出。
我在 github 上创建了一个关于此的问题,但还没有回复。