3. 输入类型
5m

概述

奥德赛升空 III, 我们学习到,我们可以为模式中的定义 ,字段的可以使用该字段。在该课程中,我们只为字段定义了一个参数,因此我们的模式保持相当简单清晰。

但在气闸中,我们的中有一些 。如何在保持模式易于读取的同时,还为提供所需数据?答案是使用input类型!

在本课程中,我们将

  • 了解input类型
  • 探究将input类型用于的好处
  • 查看input类型在气闸代码库中如何使用的示例

input类型是什么?

input 类型在 中是一个特殊的 ,它将一组 组合在一起,然后可以将其用作另一个 的参数。

使用 input 类型可以帮助我们对 进行分组和理解,特别是对于 。例如,在 Airlock 中创建清单时,我们知道 需要包括有关清单的大量数据 (标题、描述、照片缩略图、床位数、每晚费用、位置类型和便利设施)。我们 可以createListing 中列出所有这些 ,但这可能会难以控制且难以理解。

相反,我们可以创建一个名为 CreateListingInput 的输入类型并列出那里所需的所有 。这样,我们可以让 定义保持清晰,我们还可以在需要相同 集的其他变异中重复使用该输入类型。

定义一个 input

若要定义输入类型,请使用 input 关键字,后跟名称和大括号 ({})。在大括号中,我们按常例列出 和类型。请注意,输入类型的字段只能是 、枚举或另一个输入类型。

下面是基于 Airlock 模式的另一组输入类型的示例

server/schema.graphql
input SearchListingsInput {
checkInDate: String!
checkOutDate: String!
numOfBeds: Int
page: Int
limit: Int
sortBy: SortByCriteria # this is an enum type
}

使用 input

要在模式中使用 input 类型,我们可以将其设置为 的类型。例如,searchListings 使用了 SearchListingsInput 类型,如下所示:

server/schema.graphql
type Query {
# ...
"Search results for listings that fit the criteria provided"
searchListings(criteria: SearchListingsInput): [Listing]!
# ...
}

注意:输入类型可在多个 中重复使用,但在为查询和 使用 相同 的输入类型时要小心!某些 在 mutations 中可能是必需的,但在查询中可能不是必需的。


有关更多详细信息,请查看 Apollo 关于输入类型的文档

在 Airlock 代码库中查看

在 Airlock 模式中定义了多个输入。在 server/schema.graphql 文件中查看它们。

  • 您对现有输入有什么看法?
  • 如何使用输入在客户端代码中?

实践

我们如何在模式中使用 input 类型?

要点

  • 输入类型是一个特殊的 用作 的参数。这使我们能够将所有参数分组在一起并理解它们,特别是对于

接下来

在下一课中,我们将学习另一种分组相关属性的工具: 接口

上一个