字符串插值和片段之间有什么显着区别?

进行以下查询:

import gql from "graphql-tag";

const FOO = gql` {
  foo (id: "12") {
    id
    qux {
      id
    }
  }
}

const BAR = gql` {
  BAR (id: "12") {
    id
    qux {
      id
    }
  }
}

如果我们可以保留代码DRY并一次定义qux,那就太好了。

我看到两种解决方案:

  1. 字符串插值,从查询中取出qux并将其定义为字符串。这是GitHub gist
  2. 使用fragments

但是,与#2一起进行时有一个警告:

  

如果在联合和接口上使用片段,则需要使用IntrospectionFragmentMatcher

使用片段有什么好处?

min9884 回答:字符串插值和片段之间有什么显着区别?

那里的Apollo文档有些误导。使用接口或联合将需要您提供一个IntrospectionFragmentMatcher句点。这是因为inline fragment仍然是片段。如果要查询联合或接口字段,则必须针对每种具体类型(内联或其他)使用一个片段。所以我真的不会认为这是利用碎片的“陷阱”。

通常应出于以下几个原因使用片段:

  • 公约。已经熟悉GraphQL的任何人都可以查看您的代码,并立即了解发生了什么。任何为您的项目做贡献的人都可以更轻松地做到这一点。
  • 其他验证。片段需要“开启”条件,以确保在正确的位置使用它们。将片段与错误的字段一起使用将产生比仅请求错误的字段更多的错误消息(有关示例,请参见here)。
  • 更好的DX。使用webpack加载程序或babel插件,您可以将查询保存在单独的文件中,然后直接将其导入,而不必在任何地方导入graphql-tag。大多数IDE支持以这种方式存储的GraphQL文档的语法高亮显示和其他好处。

使用字符串插值的主要好处是可以轻松地有条件地包含或排除字段。通过使用@skip@include伪指令,对于片段仍然可以实现此操作,但更为冗长。

本文链接:https://www.f2er.com/3107288.html

大家都在问