gatsbyjs:多次使用graphql,还是一次通过上下文传递结果?

gatsbyjs:多次使用graphql,还是一次通过上下文传递结果?,gatsby,graphql-js,Gatsby,Graphql Js,使用gatsby node.js并以编程方式创建页面,我有两个选项: 我可以在gatsby node.js上对我需要的所有东西进行graphql查询,然后使用context将边数组传递给我使用的不同模板 这样,模板就不需要再次执行另一个graphql查询 我可以在gatsby node.js上执行相同的查询(因为我无论如何都需要这些信息),但是我可以使用context将相关信息传递给模板,这样他们就可以执行其他graphql查询来检索他们需要的数据 这样,我就不会通过上下文传递大量数据(事实并非

使用
gatsby node.js
并以编程方式创建页面,我有两个选项:

  • 我可以在
    gatsby node.js
    上对我需要的所有东西进行graphql查询,然后使用
    context
    将边数组传递给我使用的不同模板
  • 这样,模板就不需要再次执行另一个
    graphql
    查询

  • 我可以在
    gatsby node.js
    上执行相同的查询(因为我无论如何都需要这些信息),但是我可以使用
    context
    将相关信息传递给模板,这样他们就可以执行其他
    graphql
    查询来检索他们需要的数据
  • 这样,我就不会通过上下文传递大量数据(事实并非如此,但最终可能会发生),而是重复数据库查询

    什么更有效率?我看到文档似乎建议重复
    graphql
    查询,但我不完全确定

    所以问题是,在盖茨比中对
    graphql
    进行大量调用有什么缺点吗?或者最好只调用一次,其余的调用使用javascript?

    (示例)

    在模板中,不要进行任何查询,因为所需的内容在上下文中

    还是相反

          createPage({
            component: path.resolve(`./src/templates/myTemplate.js`),
            context: {
              name: node.name,
            },
    
    在模板中,执行特定的查询

      query($name: String) {
        allMarkdownRemark(filter: { name: {eq: $name }}) {
          edges {
            node {
              name
              title
              date
              tags
              html
            }
          }
        }
    

    在我看来,做这两个查询似乎是多余的,但可能是过度使用
    上下文
    在某种程度上是有害的?

    最后,我决定将尽可能少的查询保留在
    gatsby node.js
    中,每个模板最终都会执行更适合其需要的查询,我决定将最小可能的查询保留在
    gatsby node.js
    中,并且每个模板执行的查询都更适合它们需要的内容

    但真正完整的数据不应该通过上下文传递到页面——您应该只传递在页面查询中使用的最小需要的数据(如ID或slug),以便在那里获得完整的数据

    我认为您的示例数据足够小,这无关紧要,不过我确实想补充一点,为每个模板创建查询有一些好处:

    • 如何查询数据就放在它的组件旁边-当某些东西需要调试时,不要在
      gatsby node.js
      和模板之间来回移动
    • 添加数据更容易,因为您只需要修改查询(相对于修改查询,然后将数据添加到上下文)
      • FWIW,这里有这个

        但真正完整的数据不应该通过上下文传递到页面——您应该只传递在页面查询中使用的最小需要的数据(如ID或slug),以便在那里获得完整的数据

        我认为您的示例数据足够小,这无关紧要,不过我确实想补充一点,为每个模板创建查询有一些好处:

        • 如何查询数据就放在它的组件旁边-当某些东西需要调试时,不要在
          gatsby node.js
          和模板之间来回移动
        • 添加数据更容易,因为您只需要修改查询(相对于修改查询,然后将数据添加到上下文)

        是的,这些都是很好的观点,更模块化,谢谢:)是的,这些都是很好的观点,更模块化,谢谢:)
          query($name: String) {
            allMarkdownRemark(filter: { name: {eq: $name }}) {
              edges {
                node {
                  name
                  title
                  date
                  tags
                  html
                }
              }
            }