首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GraphQL中的复杂查询变量(通过盖茨比)

GraphQL中的复杂查询变量(通过盖茨比)
EN

Stack Overflow用户
提问于 2019-05-28 11:23:00
回答 1查看 1.1K关注 0票数 6

gatsby-plugin-intl的帮助下,我正在使用盖茨比构建一个本地化的静态网站。这个插件向页面(包括基于模板的页面)添加一个名为intl的上下文变量,它是一个对象:https://github.com/wiziple/gatsby-plugin-intl/blob/master/src/gatsby-node.js#L27-L34

我想从页面查询的上下文中访问intl.language变量。在这个阶段,这是我的(失败)代码:

代码语言:javascript
复制
query($slug: String!, $intl: String) {
  contentfulPerson(slug: {eq: $slug}, node_locale: {eq: $intl.language}) {
    name
  }
}

内容是我使用的无头CMS,我想从其中获取正确的区域设置中的数据。

显然,这段代码有两个问题:$intl不是字符串,$intl.language在语法上不正确。但我不知道如何解决这两个问题。

我想我可以分叉插件,也可以在我自己的gatsby-node.js中做一些事情,使语言在上下文中作为顶级变量可用,但我想知道是否有一种方法可以直接实现它。Gatsby说查询变量可以是复杂的(https://www.gatsbyjs.org/docs/graphql-reference/#query-variables),但在它们提供的示例中,它们没有说明如何定义类型或如何访问这些变量中的属性。

编辑:我尝试使用以下代码将语言移动到gatsby-node.js中的顶级上下文变量:

代码语言:javascript
复制
exports.onCreatePage = ({page, actions}) => {
  const { createPage, deletePage } = actions
  deletePage(page)
  createPage({
    ...page,
    context: {
      ...page.context,
      language: page.context.intl.language
    }
  })
}

但是程序内存不足(即使增加了max_old_space_size)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-21 21:03:08

您可以通过以下操作将language字段移动到顶级上下文:

代码语言:javascript
复制
exports.onCreatePage = ({ page, actions }) => {
  const { createPage, deletePage } = actions
  const oldPage = Object.assign({}, page)

  page.context.language = page.context.intl.language;
  if (page.context.language !== oldPage.context.language) {
    // Replace new page with old page
    deletePage(oldPage)
    createPage(page)
  }
}

检查字段是否已更改避免了无穷大循环。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56341100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档