6

是否有任何情况下您应该${foo}在 Apollo 查询中使用而不是variables: {foo: foo}

在此处输入图像描述

4

2 回答 2

11

您可以在 GraphQL 查询中使用变量做很多事情!

  • 显然,您可以将变量作为参数传递给各个字段
  • 您还可以使用@skip 和 @include 指令来修改查询中的字段

通过结合这两个工具以及将来可能的其他工具,基本上不需要进行字符串插值。

为什么 GraphQL 查询中的字符串插值不好?好吧,出于几个原因,最好将 GraphQL 查询字符串视为静态对象,而不是要操作的字符串:

  1. 您可能会意外地对无效查询进行字符串操作。如果你没有正确地转义一些参数,你最终可能会得到一个返回错误的查询或一些你没有预料到的完全不同的数据。变量是 JSON 编码的,因此无需转义它们。
  2. 如果您的查询是动态生成的,则无法使用eslint-plugin-graphql等工具对其进行静态分析,因此您无法在不实际运行代码的情况下检查您的查询是否有效。
  3. 如果查询由许多不同的字符串组成,其他开发人员将更难以理解返回数据的形状。如果其中有任意 JavaScript 代码,您也不能将查询复制粘贴到 GraphiQL 之类的内容中以尝试运行它。

简而言之,有很多机会可以用 GraphQL 查询字符串做一些很酷的事情,但是一旦你开始使用任意代码来操作它们,就会变得更加困难或不可能。所以我的建议是,坚持变量。

于 2016-05-20T05:40:40.113 回答
-1

TL;DR 不,不要在模板中使用字符串插值。它搞砸了人们可以做的任何静态分析。

于 2016-05-20T02:39:20.610 回答