变量与模板文字插值

时间:2016-05-20 02:37:29

标签: javascript apollo

您是否应该在Apollo查询中使用${foo}而不是variables: {foo: foo}

enter image description here

2 个答案:

答案 0 :(得分:6)

你可以在GraphQL查询中对变量做很多事情!

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

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

  1. 您可能会意外地通过字符串操纵无效查询。如果你没有正确地转义某些参数,你最终可能会得到一个返回错误的查询或一些你并不期望的完全不同的数据。变量是JSON编码的,因此无需转义它们。
  2. 如果您的查询是动态生成的,则无法使用eslint-plugin-graphql等工具对其进行静态分析,因此您无法在不实际运行代码的情况下检查查询是否有效
  3. 如果查询由许多不同的字符串组成,其他开发人员将更难理解返回数据的形状。如果存在任意JavaScript代码,您也无法将查询复制粘贴到GraphiQL中以尝试运行它。
  4. 简而言之,有很多机会使用GraphQL查询字符串来做很酷的事情,但是一旦你开始使用任意代码来操作它们变得更加困难或不可能。所以我的建议是坚持变量。

答案 1 :(得分:-1)

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