Graphql 字符串插值和片段之间有什么显著的区别吗?

Graphql 字符串插值和片段之间有什么显著的区别吗?,graphql,apollo-client,graphql-js,graphql-tag,Graphql,Apollo Client,Graphql Js,Graphql Tag,请回答以下问题: 从“graphql标签”导入gql; 常量FOO=gql`{ 富(身份证号码:“12”){ 身份证件 库克斯{ 身份证件 } } } 常数条=gql`{ 酒吧(编号:“12”){ 身份证件 库克斯{ 身份证件 } } } 如果我们能保持代码干燥并定义qux一次就好了 我看到两种解决办法: 字符串插值,从查询中取出qux,并将其定义为字符串。这是一个例子 使用 但使用#2有一个警告: 如果在联合和接口上使用片段,则需要使用内省FragmentMatcher 使用碎片有什么好处?

请回答以下问题:

从“graphql标签”导入gql;
常量FOO=gql`{
富(身份证号码:“12”){
身份证件
库克斯{
身份证件
}
}
}
常数条=gql`{
酒吧(编号:“12”){
身份证件
库克斯{
身份证件
}
}
}
如果我们能保持代码干燥并定义
qux
一次就好了

我看到两种解决办法:

  • 字符串插值,从查询中取出
    qux
    ,并将其定义为字符串。这是一个例子
  • 使用
  • 但使用#2有一个警告:

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


    使用碎片有什么好处?

    阿波罗文档有点误导。使用接口或联合将要求您提供一个内省FragmentMatcher,句号。那是因为a仍然是一个片段。如果要查询union或interface字段,则必须对每个具体类型使用一个片段,无论是内联还是其他类型。所以我不认为这是使用碎片的“警告”。 出于以下几个原因,您通常应该使用片段:

    • 惯例。任何已经熟悉GraphQL的人都可以查看您的代码并立即掌握发生了什么。任何对您的项目有贡献的人都可以更轻松地完成此任务
    • 附加验证。碎片需要“打开”条件,以确保它们在正确的位置使用。使用带有错误字段的片段将产生比简单地请求错误字段(参见示例)更具信息性的错误消息
    • 更好的DX。使用webpack loader或babel插件,您可以将查询保存在单独的文件中并直接导入,而无需到处导入
      graphql标记。大多数IDE都支持语法突出显示和其他以这种方式存储的GraphQL文档
    使用字符串插值的主要好处是能够方便地有条件地包含或排除字段。通过使用
    @skip
    @include
    指令,片段仍然可以实现这一点,但要详细得多