💻客户端突变
使用 Explorer 很简单,但是我们需要运行mutate从应用程序中的用户输入中输入。因此,我们切换至客户端,并使用新挂钩发送突变!
当我们导航到曲目页面之前,我们将更新视图数量。此导航在我们的TrackCard
组件中发生。
在 client/src/containers
文件夹中,我们打开 track-card.js
文件。
在顶部,我们开始从 @apollo/client
包导入。我们需要 gql
,因为我们将在 mutateuseMutation
挂钩将 mutate发送到我们的服务器。
import { gql, useMutation } from "@apollo/client";
接下来,让我们新建一个 变量来保存我们的 转换,并将它命名为 INCREMENT_TRACK_VIEWS
,并将它设置为 gql
模板字面量并添加反引号 (`
)。在反引号中,我们将粘贴我们在 Studio 中之前构建的 转换,并添加一个注释,说明此转换的用途。
/*** Mutation to increment a track's number of views*/const INCREMENT_TRACK_VIEWS = gql`mutation IncrementTrackViews($incrementTrackViewsId: ID!) {incrementTrackViews(id: $incrementTrackViewsId) {codesuccessmessagetrack {idnumberOfViews}}}`;
🎣 useMutation
钩子
由于这是一个 转换而不是一个 查询,我们不会使用我们熟悉的 useQuery
钩子。取而代之的是,我们将切换到 useMutation
钩子。
在 TrackCard
组件中,我们将通过调用钩子开始。它使用我们之前设置的 转换 INCREMENT_TRACK_VIEWS
作为第一个参数。
第二个参数是一个 options
对象,带有 variables
键。在这里,我们将添加 incrementTrackViewsId
变量并将其设置为我们正在导航到的音轨的 id
。该 id
已从 track
属性顶部为我们分解。
useMutation(INCREMENT_TRACK_VIEWS, {variables: { incrementTrackViewsId: id },});
现在,有一个奇怪之处:useQuery
与 useMutation
不同,调用 useMutation
不会自动执行 突变!
相反,useMutation
挂钩返回一个包含两个元素的数组,我们将在此处开始解构。
const [incrementTrackViews] = useMutation(INCREMENT_TRACK_VIEWS, {variables: { incrementTrackViewsId: id },});
第一个元素是 突变函数我们稍后将使用它来实际运行 突变。我们将称之为 incrementTrackViews
。第二个元素是一个包含有关 突变的信息对象: loading
, error
和 data
。此组件不需要它,因此我们不必提取它。
👆🏽设置 onClick
我们什么时候要运行突变函数?当用户单击卡片时!
我们来给 onClick
添加一个属性 CardContainer
组件并配置它以调用我们的突变函数, incrementTrackViews
。
<CardContainerto={`/track/${id}`}onClick={incrementTrackViews}>
loading
、error
和 将该框中的项目拖动到上面的空白处
GraphQL 操作
突变函数
useGqlQuery
参数
值
选项
数组
变量
useMutation
整数
数据
useQuery
1️⃣ 再说一件事...
最后一件事情——让我们添加一个控制台日志来检查 变更响应是否已完成。
为此,让我们回到我们设置 useMutation
钩子的地方,并为我们的 options
对象添加另一个属性。 onCompleted
属性是一个回调函数,它将在 变更成功完成时运行,并且可以访问返回的响应。我们向浏览器控制台记录响应。
const [incrementTrackViews] = useMutation(INCREMENT_TRACK_VIEWS, {variables: { incrementTrackViewsId: id },// to observe what the mutation response returnsonCompleted: (data) => {console.log(data);},});
我们的客户端应用程序已准备好向服务器发送此 变更!让我们在上一课中看看我们一路走来的结果!
使用 useMutation 钩子向服务器发送 ASSIGN_SPACESHIP_MUTATION
变更。它需要两个变量:spaceshipId
和 missionId
。将 mutate 函数结构化(称之为 assignSpaceship
),并从钩子返回数组中结构出 loading
、error
和 data
属性。
分享你关于这节课的问题和评论
你的反馈有助于我们提高!如果你遇到困难或疑惑,请告诉我们,我们会帮助你。所有评论都是公开的,必须遵守 Apollo 行为准则。请注意,已解决或处理的评论可能会被移除。
你需要一个 GitHub 帐户才能在此处发布。没有 GitHub 帐户? 转而发布在 Odyssey 论坛上。