- GraphQL实战:写给全栈工程师们
- 王北南
- 311字
- 2025-03-01 05:50:31
2.6.5 使用Directive
有时候需要根据某种条件来批量选择或者不选择一些字段。
需求 某个移动应用客户端需要根据目前屏幕的大小来决定获取内容的多少,比如说,如果发现是窄屏手机,就不显示产品的图片了,只显示名字。原来的程序员通过写两个不同的查询来解决这个问题,但现在想只用一个查询达到目的。
原来的查询是这样的:

下面做一个统一的查询来适应所有的屏幕:


通过在字段后面指定两种Directive的方式,来决定字段的去留。
@include(if: $isNarrowScreen)如果if后面的表达式为真,就保留该字段,否则剔除该字段。
@skip(if:$isNarrowScreen)和@include相反,如果if后面的表达式为真,就剔除该字段,否则保留该字段。
对于批量字段需要通过某种条件来决定去留,可以使用Directive来结合片段和内联片段。
动动手:如果在同一个字段上同时加入@include和@skip会发生什么?