在 s-s-r 和动态 URL 中使用 Apollo 进行查询 (Next.js)

Posted

技术标签:

【中文标题】在 s-s-r 和动态 URL 中使用 Apollo 进行查询 (Next.js)【英文标题】:Query with Apollo in s-s-r and Dynamic URLs (Next.js) 【发布时间】:2020-05-08 03:35:14 【问题描述】:

我正在开发一个使用像 [slug].js 这样的动态 URL 的项目,我想做的是:当有人访问一些像 domain.com/my-post 这样的 URL 时,我的页面应该查询可用的 slug(即在 graphql 端点中包含诸如 SEO 元标记之类的数据,如果 url 存在于我的数据库中,则加载页面。

我正在使用 s-s-r、apollo hooks 等。

我的问题是:在生产中,当有人在 facebook 上共享该 url 或类似的东西时,该 url (domain.com/my-post) 上的元标记将是空的 (在查询查找可用的 slug 之前) 或之后元标签和内容已满?考虑到当我使用来自 apollo 的 useQuery 时,我需要返回一些东西来处理来自该查询的加载和错误。当用户访问该网址时,我会显示一条“正在加载”消息。

【问题讨论】:

【参考方案1】:

我的问题是:当有人在 Facebook 上分享该网址时,在生产中 或类似该网址(domain.com/my-post)上的元标记将 是空的(在查询寻找可用的蛞蝓之前)或之后 元标记和内容已满?

这取决于您在哪里提出请求。 如果您让请求服务器端(例如在getInitialProps 内部)页面将在预渲染之前等待获取数据,这意味着当页面渲染时,它将使用元标记进行渲染。

如果您遵循 with-apollo 示例,它应该 render server side 显然只有当您在 pages 中使用您的 HOC 时,否则如果您在组件树中更深地导入您的 HOC,getInitialProps 将被忽略(因为它只在页面中起作用)

【讨论】:

以上是关于在 s-s-r 和动态 URL 中使用 Apollo 进行查询 (Next.js)的主要内容,如果未能解决你的问题,请参考以下文章

s-s-r 有啥好处:动态导入的真正道具?

Vue 3 中的 s-s-r 和 keep-alive 问题:动态组件

Quasar s-s-r:使用引导文件将 HTML 内容注入 index.html

在 NextJS、nginx 和 Material-ui(s-s-r) 中使用 CSP

GraphQL 查询,具有动态字段

有啥方法可以避免在 s-s-r 中使用 React 出现“文本内容不匹配”警告?