10月8日至10日,加入我们即将在纽约市举行的会议,学习有关 GraphQL 联邦和 API 平台工程方面的最新技巧、趋势和新闻。加入纽约市 GraphQL 峰会 2024
文档
免费开始

类 ApolloClient

API 参考


关于ApolloClient类封装了 Apollo 的核心客户端 API,支持所有可用的视图层集成(例如 React、iOS 等)。

ApolloClient 构造函数

构造 ApolloClient 的实例。

需要传递一个 ApolloClientOptions 参数,该参数支持以下列出的字段。

返回一个初始化的 ApolloClient 对象。

示例

import { ApolloClient, InMemoryCache } from '@apollo/client';
const cache = new InMemoryCache();
const client = new ApolloClient({
// Provide required constructor fields
cache: cache,
uri: 'https://127.0.0.1:4000/',
// Provide some optional constructor fields
name: 'react-web-client',
version: '1.3',
queryDeduplication: false,
defaultOptions: {
watchQuery: {
fetchPolicy: 'cache-and-network',
},
},
});

关于 defaultOptions 对象的更多信息,请参阅以下部分。

函数

watchQuery

该功能监视根据指定的选项缓存的 并返回一个 ObservableQuery。我们可以订阅这个 ObservableQuery 并且在缓存存储变化时通过观察者接收更新结果。

注意,此方法不是 的实现。而是使用 Apollo 的存储,以便在查询结果上反应性地提供更新。

例如,假设您在一个 GraphQL 查询上调用 方法来获取某人的姓名,此查询提供了由 dataIdFromObject 提供的特定对象标识符。稍后,另一个查询获取了同一个人的姓名,而姓名已经发生了变化。然后,与第一个查询的结果相关联的任何观察者都将使用新的结果对象更新。

注意,如果缓存没有发生变化,则订阅者将 不会 被通知。

有关存储反应性的描述,请见 此处

签名

function watchQuery(
options: WatchQueryOptions<TVariables, T>
): ObservableQuery<T, TVariables>

参数

名称 / 类型
描述

options

WatchQueryOptions<TVariables, T>
显示/隐藏子属性
操作选项

errorPolicy(可选)

ErrorPolicy

指定查询如何处理返回 GraphQL 错误和部分结果的响应。

有关详细信息,请参阅GraphQL错误策略

默认值是none,这意味着查询结果包含错误详情但不包含部分结果。

DocumentNode | TypedDocumentNode

将GraphQL查询字符串解析为用gql模板字面量表示的AST。

一个包含所有 GraphQL 变量对象,这些变量是您查询执行所必需的。

对象中的每个键与名称相对应,该键的值对应变量值。

网络选项
DefaultContext

如果您正在使用Apollo Link,则该对象是在传递到您的链接链的context对象中的初始值。

如果设置为true,则当网络状态更改或发生网络错误时,正在进行的查询相关组件将重新渲染。

默认值是false

指定查询轮询更新结果的间隔(毫秒)。

默认值是0(无轮询)。

当轮询发生引用尝试时调用的回调函数。如果函数返回true,则轮询将跳过并在下一个轮询间隔之前不再重试。

缓存选项
WatchQueryFetchPolicy

指定查询在执行期间如何与 Apollo Client 缓存交互(例如,在向服务器发送请求之前是否检查缓存)。

有关详细信息,请参阅设置fetch策略

默认值是cache-first

WatchQueryFetchPolicy

默认为选项.fetchPolicy的初始值,但可以显式配置以指定Watch查询FetchPolicy,以便在变量更改时无论是否被nextFetchPolicy干预都会回退。

WatchQueryFetchPolicy | ((this: WatchQueryOptions, currentFetchPolicy: WatchQueryFetchPolicy, context: NextFetchPolicyContext) => WatchQueryFetchPolicy)

指定此查询完成后使用的FetchPolicy

指定NetworkStatus.refetch操作是否应该合并传入字段数据与现有数据,或者覆盖现有数据。覆盖可能是更好的选择,但目前默认行为是合并,以向后兼容Apollo Client 3.x。

如果为true,则查询可以从缓存返回部分结果,如果缓存不包含所有查询的字段结果。

默认值是false

其他

⚠️ 已弃用

使用canonizeResults可能导致内存泄漏,因此我们一般不建议再使用此选项。Apollo Client的下一个版本将包含一个类似的功能,但没有内存泄漏的风险。

是否在返回之前将缓存结果canonize。Canonization需要额外的时间,但它可以加快未来的深度比较速度。默认为false。

⚠️ 已弃用

由于-fetch策略的更一致应用,在Apollo Client 3中设置此选项是不必要的。它可能在未来的版本中删除。

如果为true,则当检测到查询结果为部分结果时,将导致查询重取。

默认值是false

结果

ObservableQuery<T, TVariables>

根据指定的选项解析单个查询,并返回一个Promise对象,该对象可以是解析为结果数据或由于错误而被拒绝。

签名

function query(
options: QueryOptions<TVariables, T>
): Promise<ApolloQueryResult<T>>

参数

名称 / 类型
描述

options

QueryOptions<TVariables, T>

一个类型为QueryOptions的对象,允许我们描述如何处理此查询,例如是否应该击中服务器或只从缓存中解析等。

显示/隐藏子属性
操作选项

指定查询如何处理返回 GraphQL 错误和部分结果的响应。

有关详细信息,请参阅GraphQL错误策略

默认值是none,这意味着查询结果包含错误详情但不包含部分结果。

DocumentNode | TypedDocumentNode

将GraphQL查询字符串解析为用gql模板字面量表示的AST。

一个对象,包含你的查询执行所需的所有GraphQL变量。

对象中的每个键对应一个变量名,该键的值对应于变量的值。

网络选项
DefaultContext

如果您正在使用Apollo Link,则该对象是在传递到您的链接链的context对象中的初始值。

如果设置为true,则当网络状态更改或发生网络错误时,正在进行的查询相关组件将重新渲染。

默认值是false

指定查询轮询更新结果的间隔(毫秒)。

默认值是0(无轮询)。

缓存选项

指定查询在执行期间如何与Apollo Client缓存交互(例如,它在向服务器发送请求之前是否检查缓存)。

有关详细信息,请参阅设置fetch策略

默认值是cache-first

如果 true,则查询可以返回缓存中的部分结果,如果缓存不包含所有查询字段的结果。

默认值是false

其他

⚠️ 已弃用

使用canonizeResults可能导致内存泄漏,因此我们一般不建议再使用此选项。Apollo Client的下一个版本将包含一个类似的功能,但没有内存泄漏的风险。

是否在返回之前将缓存结果canonize。Canonization需要额外的时间,但它可以加快未来的深度比较速度。默认为false。

⚠️ 已弃用

由于-fetch策略的更一致应用,在Apollo Client 3中设置此选项是不必要的。它可能在未来的版本中删除。

如果为true,则当检测到查询结果为部分结果时,将导致查询重取。

默认值是false

结果

Promise<ApolloQueryResult<T>>
显示/隐藏子属性
其他

这是传递给onError和Query链式调用的单一错误对象,通常在手动调用 client.query 时抛出。它将包含网络错误字段和任何GraphQL错误。有关更多信息,请参阅 https://apollo.graphql.net.cn/docs/react/data/error-handling/

ReadonlyArray

服务器端执行GraphQL操作期间发生的任何错误列表。有关更多信息,请参阅 https://apollo.graphql.net.cn/docs/react/data/error-handling/

boolean
NetworkStatus

根据指定的选项解析单个 ,并返回一个Promise,该Promise要么 Resolve with the resulting data,要么 reject with an error。在某些情况下,dataerrors可能都是 undefined,例如当errorPolicy设置为'ignore'时。

它接受一个具有以下键值的对象作为选项:

签名

function mutate(
options: MutationOptions<TData, TVariables, TContext>
): Promise<FetchResult<TData>>

参数

名称 / 类型
描述

options

MutationOptions(TData, TVariables, TContext)
显示/隐藏子属性
操作选项

如果为 true,则确保在将应用变更视为完成之前,完成全部 refetchQueries中包含的所有查询。

默认值是 false(异步重新查询)。

指定mutation如何处理返回GraphQL错误和部分结果的响应。

有关详细信息,请参阅GraphQL错误策略

默认值是 none,意味着mutation结果包含错误详情,但不包含部分结果。

DocumentNode | TypedDocumentNode

包含单个mutation的GraphQL 。通常使用包含在graphql-tag包中的gql创建。

OnQueryUpdated<any>

可选的回调,用于拦截由 mutation 更新的缓存数据的查询,以及传递到 client.mutaterefetchQueries: [...] 列表中的任何查询。

onQueryUpdated 返回一个 Promise 会使最后的 mutation Promise 等待返回的 Promise。返回 false 将使查询被忽略。

((result: FetchResult<TData>) => InternalRefetchQueriesInclude) | InternalRefetchQueriesInclude

一个数组(或返回一个数组的函数)指定你在 mutation 之后想要重新执行的查询。

每个数组值可以是以下之一

  • 包含要执行 query 以及任何 variables

  • 表示要重新执行的 queryoperation name 的字符串

包含你的 mutation 需要执行的所有的 GraphQL variables 的对象。

对象中的每个键对应一个变量名,该键的值对应于变量的值。

网络选项

如果您正在使用Apollo Link,则该对象是在传递到您的链接链的context对象中的初始值。

缓存选项
MutationFetchPolicy

提供 no-cache 如果 mutation 的结果不应该写入 Apollo Client 缓存。

默认值是 network-only (这意味着结果将写入缓存)。

与查询不同, mutations 不支持 除了 network-onlyno-cache 之外的 fetch policies

TData | ((vars: TVariables, { IGNORE }: { IGNORE: IgnoreModifier; }) => TData | IgnoreModifier)

提供一个对象或回调函数,在 mutation 之后调用,允许您返回乐观数据并在必要时通过 IGNORE 信号对象跳过更新,Apollo Client 将将此临时(可能不正确)的响应缓存到 mutation 完成,以实现更响应式的外观更新。

有关更多信息,请参阅 乐观的 mutation 结果

MutationUpdaterFunction<TData, TVariables, TContext, TCache>

Apollo Client 在 mutation 完成后用于更新缓存的函数。

更多信息,请参阅 突变后更新缓存

其他

为了避免保留 mutation字段的敏感信息,Apollo Client v3.4+在每次 mutation完成后会自动从缓存中清除任何ROOT_MUTATION字段。如果您需要这些信息保留在缓存中,您可以通过将keepRootFields: true传递到 mutation来防止其被删除。ROOT_MUTATION结果数据也会传递到 mutationupdate函数中,因此我们建议尽可能通过这种方式获取结果,而不是使用此选项。

MutationQueryReducersMap

一个MutationQueryReducersMap,它是一个从查询名到 mutation查询还原器的映射。简要来说,这个映射定义了如何将突变的结果合并到当前由您的应用程序监视的查询的结果中。

结果

Promise<FetchResult<TData>>

根据指定的选项订阅一个订阅,并返回一个Observable,它可能会发出接收到的数据或错误。

签名

function subscribe(
options: SubscriptionOptions<TVariables, T>
): Observable<FetchResult<T>>

参数

名称 / 类型
描述

options

SubscriptionOptions
显示/隐藏子属性
其他
DefaultContext

组件和您的网络接口()之间的共享上下文。

指定此ErrorPolicy操作的错误策略

组件和您的网络接口(Apollo Link)之间的共享上下文。

指定组件如何与Apollo缓存交互。有关详细信息,请参阅设置获取策略

DocumentNode | TypedDocumentNode

一个包含单个 subscription的GraphQL文档,通常使用gqlgraphql-tag包创建。

一个包含您订阅需要执行的 variables的所有对象

结果

Observable<FetchResult<T>>

尝试从提供的 GraphQL 查询中读取一些数据,而不进行网络请求。此方法将从根查询开始。要从一个由 dataIdFromObject 返回的具体 id 开始,请使用 readFragment

签名

function readQuery(
options: DataProxy.Query<TVariables, T>,
optimistic?: boolean
): T | null

参数

名称 / 类型
描述

options

DataProxy.Query<TVariables, T>

将此参数设置为 true 以允许 readQuery 返回乐观结果。默认值为 false

结果

T | null

尝试从提供的 GraphQL 中读取一些数据,而不进行网络请求。此方法将会读取缓存中的任何任意 id 的 GraphQL 查询片段,与 readQuery 不同,后者只从根 查询 读取。

您必须传递一个包含单个 GraphQL 片段的文档或包含多个片段的文档,这些片段代表您正在读取的内容。如果您传递一个包含多个片段的文档,则还必须指定一个 fragmentName

签名

function readFragment(
options: DataProxy.Fragment<TVariables, T>,
optimistic?: boolean
): T | null

参数

名称 / 类型
描述

options

DataProxy.Fragment<TVariables, T>

将此参数设置为 true 以允许 readFragment 返回乐观结果。默认值为 false

结果

T | null

直接将符合提供的 GraphQL 查询形状的数据写入存储。此方法将从根查询开始。要从一个由 dataIdFromObject 返回的具体 id 开始,则使用 writeFragment

签名

function writeQuery(
options: DataProxy.WriteQueryOptions<TData, TVariables>
): Reference | undefined

参数

名称 / 类型
描述

options

DataProxy.WriteQueryOptions<TData, TVariables>

结果

Reference | undefined
显示/隐藏子属性
其他
字符串

直接将提供的数据形状的 GraphQL 片段写入存储。此方法将写入缓存中的任何任意 id 的 GraphQL 查询片段,而不同于 writeQuery,后者只能从根 查询 写入。

您必须传递一个包含单个 GraphQL 片段的文档或包含多个片段的文档,这些片段代表您正在写入的内容。如果您传递一个包含多个片段的文档,则还需要指定一个 fragmentName

签名

function writeFragment(
options: DataProxy.WriteFragmentOptions<TData, TVariables>
): Reference | undefined

参数

名称 / 类型
描述

options

DataProxy.WriteFragmentOptions<TData, TVariables>

结果

Reference | undefined
显示/隐藏子属性
其他
字符串

watchFragment
由于3.10.0

根据指定的选项监视片段缓存存储,并返回一个Observable。我们可以订阅这个Observable,并在缓存存储发生变化时通过观察者接收更新结果。

您必须传递一个包含单个 GraphQL 片段的文档或包含多个片段的文档,这些片段代表您正在读取的内容。如果您传递一个包含多个片段的文档,则还必须指定一个 fragmentName

签名

function watchFragment(
options: WatchFragmentOptions<TFragmentData, TVariables>
): Observable<WatchFragmentResult<TFragmentData>>

参数

名称 / 类型
描述

options

WatchFragmentOptions<TFragmentData, TVariables>

一个WatchFragmentOptions类型的对象,允许缓存识别片段,并可选地指定是否响应乐观更新。

显示/隐藏子属性
必需的选项
DocumentNode | TypedDocumentNode<TFragmentData, TVariables>

一个GraphQL片段文档,使用gql模板字面量解析为AST。

StoreObject | Reference | string

一个包含__typename和主键字段(例如id)的对象,这些字段标识了对象,从该对象中检索片段,或者一个{ __ref: "..." }引用,或者一个string ID(罕见)。

缓存选项

在片段文档中定义的片段的名称。

如果片段文档包含多个片段,则必需,否则为可选。

如果设置为true,则watchFragment返回乐观结果。

默认值是true

GraphQL片段可能依赖的任何变量。

结果

Observable<WatchFragmentResult<TFragmentData>>

通过清除缓存并重新执行所有活动查询来重置你的整个存储。这确保了你调用此方法之前的时间段没有数据留在你的存储中。

resetStore()在用户刚刚登出时很有用。你已经删除了用户会话,现在你想要确保所有可能存在的数据引用都已删除。

重要的是要记住,resetStore()将重新检索所有活动查询。这意味着任何已挂载的组件将再次使用你的网络接口执行它们的查询。如果你不想重新执行任何查询,那么你应该确保停止监视任何活动查询。

签名

function resetStore(): Promise<ApolloQueryResult<any>[] | null>

结果

Promise<ApolloQueryResult<any>[] | null>

允许注册回调函数,当存储重置时执行。 onResetStore返回一个解绑函数,可以用来移除已注册的回调。

签名

function onResetStore(
cb: () => Promise<any>
): () => void

参数

名称 / 类型
描述

cb

() => Promise<any>

结果

() => void

从存储中删除所有数据。与resetStore不同,clearStore不会重新检索任何活动查询。

签名

function clearStore(): Promise<any[]>

结果

Promise<any[]>

允许注册回调,在存储清除时执行。onClearStore返回一个取消订阅的函数,可用于移除已注册的回调。

签名

function onClearStore(
cb: () => Promise<any>
): () => void

参数

名称 / 类型
描述

cb

() => Promise<any>

结果

() => void

调用此方法以终止任何活动客户端进程,使此 ApolloClient 实例变得安全以确保释放。

签名

function stop(): void

重新获取所有活动查询。

reFetchObservableQueries()当网络中断时,如果要使客户端返回到正确状态,则很有用。

重要的是要记住,reFetchObservableQueries()将重新获取任何活动查询。这意味着任何可能会挂载的组件将使用您的网络接口重新执行它们自己的查询。如果您不希望重新执行任何查询,请务必停止监视任何活动查询。接受可选参数includeStandby,当重新获取时将包括处于备用模式的查询。

签名

function reFetchObservableQueries(
includeStandby?: boolean
): Promise<ApolloQueryResult<any>[]>

参数

名称 / 类型
描述

结果

Promise<ApolloQueryResult<any>[]>

重新获取指定的活动查询。类似于"reFetchObservableQueries()",但有特定的查询列表。

refetchQueries()对于强制刷新选定查询的用例很有用。

重要的是要记住,refetchQueries()将重新获取指定的活动查询。这意味着任何可能会挂载的组件将使用您的网络接口重新执行它们的查询。如果您不希望重新执行任何查询,请确保停止监视任何活动查询。

签名

function refetchQueries(
options: RefetchQueriesOptions<TCache, TResult>
): RefetchQueriesResult<TResult>

参数

名称 / 类型
描述

options

RefetchQueriesOptions<TCache, TResult>
显示/隐藏子属性
其他
重新获取查询包含项
OnQueryUpdated<TResult> | null
(cache: TCache) => void

结果

RefetchQueriesResult<TResult>
显示/隐藏子属性

(警告:由于复杂的继承,某些属性可能未显示在表格中!)
其他
ObservableQuery<any>[]
InternalRefetchQueriesResult<TResult>[]

获取所有当前活动 ObservableQuery 对象,在按查询 ID 字符串键的 Map 中。

"活动" 查询指的是具有观察者和fetchPolicy不是"备用"或"仅缓存"的查询。

您可以通过传递"all"而不是"active"来包含所有 ObservableQuery 对象(包括非活动对象),或者您可以传递一个查询名称数组或节点对象。

签名

function getObservableQueries(
include?: RefetchQueriesInclude
): Map<string, ObservableQuery<any>>

参数

名称 / 类型
描述

include (可选)

RefetchQueriesInclude

结果

Map<string, ObservableQuery<any>>

类型

属性

名称 / 类型
描述
ApolloCache<TCacheShape>

Apollo客户端应使用以本地存储查询结果的缓存。推荐的缓存是InMemoryCache,该缓存由@apollo/client包提供。

有关更多信息,请参阅配置缓存

您可以为Apollo客户端的网络层提供一个ApolloLink实例。有关更多信息,请参阅高级HTTP网络

必需提供一个urilink。如果您都提供了,link将优先。

string | UriFunction

GraphQL端点URI,Apollo客户端将与之通信。

必需提供一个urilink。如果您都提供了,link将优先。

⚠️ 已弃用

请使用devtools.enabled选项。

如果trueApollo Client Devtools浏览器扩展可以连接到Apollo Client。

生产环境的默认值是false,开发环境(如果有window对象)的默认值是true

提供此对象以设置应用程序级别的默认选项,您可以将其提供给watchQueryquerymutate函数。下面是一个示例对象。

请参阅此示例对象

一个自定义名称(例如,iOS)用于在您的一系列客户中识别此特定客户。和 Apollo 工作室使用此属性作为客户端识别功能的一部分。

一个自定义版本,用于识别此特定客户端的当前版本(例如,1.2)。Apollo 服务器和 Apollo 工作室使用此属性作为客户端识别功能的一部分。

不是您使用的 Apollo 客户端版本,而是任何有助于您区分客户端不同版本的字符串。

其他

如果为true,Apollo 客户端将假设从缓存中读取的结果永远不会被应用程序代码修改,从而实现大量的性能优化。

DevtoolsOptions

用于此客户端的Apollo 客户端开发工具扩展的配置。

一个对象,表示要包含在每次 HTTP 请求中的头信息,例如{Authorization: 'Bearer 1234'}

当使用link选项时,此值将被忽略。

如果为false,则 Apollo 客户端会向服务器发送每个创建的查询,即使完全相同的查询(查询字符串、变量值和操作名称完全相同)已经在飞行中。

Resolvers | Resolvers[]

在服务器端渲染之后,Apollo 客户端强制获取查询之前的时间间隔(以毫秒为单位)。

当使用Apollo Client进行服务器端渲染时,将此设置为true,以便getDataFromTree 函数可以有效地工作。

string | string[] | DocumentNode | DocumentNode[]

属性

名称 / 类型
描述
其他
Partial<MutationOptions<any, any, any>>
Partial<QueryOptions<any, any>>
Partial<WatchQueryOptions<any, any>>
示例 defaultOptions 对象
const defaultOptions = {
watchQuery: {
fetchPolicy: 'cache-and-network',
errorPolicy: 'ignore',
},
query: {
fetchPolicy: 'network-only',
errorPolicy: 'all',
},
mutate: {
errorPolicy: 'all',
},
};

您可以通过在单个函数调用中提供不同的值来覆盖此对象中指定的任何默认选项。

注意: useQuery 钩子使用 Apollo Client 的 watchQuery 函数。要使用 useQuery 钩子设置 defaultOptions,请确保在 defaultOptions.watchQuery 属性下设置。

上一页
钩子迁移指南
下一页
InMemoryCache
评分文章评分在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,商业名称Apollo GraphQL。

隐私政策

公司