变量与模板文字插值

Lor*_*ren 4 javascript apollo

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

在此输入图像描述

stu*_*ilo 9

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

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

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

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

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

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