7. 参数
4m

概览

现在是时候通过全新的一项功能来扩展我们的应用了:我们将会引入一个展示特定曲目详情的页面。我们已经获得了一些从 曲目列表的实际操作 API 来获取一个非常具体的曲目?

在此课程中,我们将会

  • 了解 s
  • 编写一个 接受一个
  • 构建一个页面来显示一个曲目对象的数据

一项新的功能

我们的目标是创建一个针对特定音轨请求数据的页面。为此,我们需要组合一个,它请求针对单一音轨的数据。

让我们从设计团队提供给我们的音轨页面模型开始。在这里,我们需要显示关于音轨的更多信息,而这些信息在主页上的卡片中尚未包含。

A mockup of the Track page showing a track thumbnail, title, and data about its modules

除了卡片中的内容外,音轨还应该有

  • 描述
  • 观看次数
  • 该音轨中包含的模块列表

对于每个模块,我们需要

  • 标题
  • 长度

新增查询入口点

返回 Sandbox,并从左侧工具栏中选择架构选项。

https://studio.apollographql.com/sandbox/schema/reference

The Schema page in Studio.

我们已经练习过 tracksForHome ,但是让我们看看 Query 类型上的另外两个字段: trackmodule。剩下的这些中的每个字段都接受一个参数

https://studio.apollographql.com/sandbox/schema/reference

The Schema page in Studio, opened to the Query type's fields and highlighting the id argument on each.

GraphQL 参数

一个是我们在中的特定中提供的值。对于trackmodule,架构定义了一个它们各自接受的id 。通过为模块或音轨对象指定id,我们可以特定对象的​​数据。

track(id: ID!): Track!

在后端,可以使用 提供的 来帮助确定如何填充该字段的数据。参数可以帮助你检索具体对象、过滤一组对象集甚至转换字段的返回值。

我们架构中接受 id track ,看起来正是我们实现曲目页面梦想所需使用的那 。它接受 id,并返回具体 Track 的数据!

https://studio.apollographql.com/sandbox/schema/reference

The Schema page in Studio, opened to the Query type's fields and highlighting the track field.

这意味着我们在前端所需要做的就是传递给具体 track 的 id 有效值——服务端将处理好返回我们所需的数据!

让我们看看如何在 Explorer 中,使用 来构建具体

🛠️ 构建查询

回到Explorer来构建我们的

https://studio.apollographql.com/sandbox/explorer

The Explorer opened to show the Query type fields

点击 track 上的加号按钮(),我们开始看到我们的 操作面板中合并起来。

https://studio.apollographql.com/sandbox/explorer

The Explorer Operation panel, updated with the track field

首先让我们重命名 以更好地解释它的用途,因此我们将用 Track 替换 GetTrack

到目前为止,操作面板的 Explorer 应该包含以下内容:

query GetTrack($trackId: ID!) {
track(id: $trackId) {
}
}

您会在此处注意到一些新内容:美元符号($)后跟名称trackId

💰 变量

$符号表示 中的 $符号后的名称是我们 的名称,我们可以在整个 中使用它。冒号后面是 的类型,它必须与我们将为其使用的 的类型相匹配。

Illustration to explain the syntax of GraphQL variables

很棒——它们让我们能够动态地从客户端传递 值,因此我们不必将值硬编码到我们的 中。每当我们创建带参数的查询时,都会使用它们。

在我们的案例中,我们有一个 名为 trackId,它是由 Explorer 在 变量部分中为我们设置的。现在,它设置为 null,但让我们用一个有效的音轨 ID 替换它: c_0

https://studio.apollographql.com/sandbox/explorer

Screenshot identifying the Variables panel in the Explorer, with the track id of 'c_0'

将以下内容添加到 Explorer 中的 变量部分:

{ "trackId": "c_0" }

在开始添加来自我们最初的模型制作的所有 之前,我们先从返回 idtitle开始。

现在,资源管理器中的 操作面板应如下所示:

query GetTrack($trackId: ID!) {
track(id: $trackId) {
id
title
}
}

当单击按钮以运行 时,我们将看到所期望的数据:第一首曲目“天文猫,导言”。

好极了,让我们通过单击 字段子标题旁的下拉菜单,添加剩余的 。当我们从下拉菜单中单击 递归选择所有字段时,我们将看到所有 和子字段已添加到

https://studio.apollographql.com/sandbox/explorer

Screenshot of the Explorer with all fields added recursively to our query

完整的 应如下所示:

query GetTrack($trackId: ID!) {
track(id: $trackId) {
id
title
author {
id
name
photo
}
thumbnail
length
modulesCount
description
numberOfViews
modules {
id
title
length
content
videoUrl
}
}
}

让我们再次单击 查询按钮… 似乎我们获取了完整的曲目,但作为 JSON 对象有些难以阅读。资源管理器有一个不错的选项,可以将响应格式化为表格。

https://studio.apollographql.com/sandbox/explorer

Screenshot of the Explorer highlighting how to format Response data in a table view

现在,我们可以清楚地看到所需的曲目,以及每个模块的所有详细信息!太棒了!

https://studio.apollographql.com/sandbox/explorer

Screenshot showing the Explorer with a complete query and successful response

实践

变量
变量由 符号表示。
 
用于为 提供动态值
 
以避免包含 
 
 值在一个查询中。每个变量的类型必须与 中指定的类型相匹配
 

将此框中的项目拖动到上方的空白处

  • 名称

  • 硬编码

  • 解析器

  • @

  • 图形

  • $

  • 参数

  • !

  • 架构

代码挑战!

构建一个名为 GetMission 的查询。此查询使用一个名为 isScheduled 的类型为可空 Boolean 的变量。它检索一个 mission,将 scheduled 参数设置为 isScheduled 变量。它检索任务的 idcodename

正在加载...
加载进度

重要要点

  • 一个 是我们为 中特定 提供的值。
  • 在后端,可以使用 帮助确定如何为 填充数据。
  • 我们使用 $ 符号表示 中。
  • 使用 ,我们可以在客户端动态传递 值。

下一步

我们的 已准备就绪,但我们仍然需要前端部分!让我们在下一节课中构建曲目页面。

上一步

分享你对本课程的意见和评论

目前本课程正在

beta
.你的反馈有助于我们改进!如果你遇到难题或感到困惑,请告诉我们,我们会帮助你。所有评论都是公开的,且必须遵守 Apollo 行为准则。请注意,已解决或处理的评论可能会被移除。

你需要一个 GitHub 帐户才能在下方发帖。没有账户吗? 改为在我们的 Odyssey 论坛中发帖。