类 InMemoryCache
API 参考
的InMemoryCache
ApolloClient
在阅读关于单个方法的介绍之前,请参阅 Apollo Client 中的缓存。
readQuery
直接针对缓存执行 GraphQL 查询,并返回其结果(如果查询无法满足,则为 null
):
// Query a cached Todo object with id 5const { todo } = cache.readQuery({query: gql`query ReadTodo {todo(id: 5) {idtextcompleted}}`,});
有关使用说明,请参阅 与缓存数据交互:readQuery
。
接受以下参数
选项
名称 / 类型 | 描述 |
---|---|
| 必需。 要执行的GraphQL 查询,通过在 |
| 查询需要的任何 GraphQL 变量名称和值的映射。 |
| 查询所用的根 默认值为 通过指定另一个缓存的对象的ID,可以在不遵守您模式支持查询的结构的情况下查询任意缓存的缓存数据。这使 |
| ⚠️ 已废弃:使用 如果 默认值为 |
签名
readQuery<QueryType, TVariables = any>(options: DataProxy.Query<TVariables>,optimistic: boolean = false,): QueryType | null
writeQuery
将数据写入缓存,形状为提供的GraphQL查询。返回写入对象的Reference
或写入失败的undefined
。
// Create or modify a cached Todo object with id 5cache.writeQuery({query: gql`query ReadTodo($id: ID!) {todo(id: $id) {idtextcompleted}}`,data: {todo: {__typename: 'Todo',id: 5,text: 'Buy grapes 🍇',completed: false},},variables: {id: 5}});
有关使用说明,请参阅与缓存数据交互:writeQuery
。
接受一个参数为options
对象的函数。此对象支持的字段如下所述。
选项
名称 / 类型 | 描述 |
---|---|
| 必须。定义要写入的数据形状的GraphQL 查询。该查询由在 |
| 必须。要写入缓存的数据。此对象的字段必须符合 |
| 需要由 |
| 使用 默认值为 通过指定另一个缓存的物体 |
| 如果为 默认值为 |
| 如果为 默认值为 |
签名
writeQuery<TData = any, TVariables = any>(options: Cache.WriteQueryOptions<TData, TVariables>,): Reference | undefined
更新查询
自3.5
从提供的GraphQL 查询的形状中检索缓存数据后,然后根据提供的更新函数更新缓存数据。
返回更新后的结果或null
(如果更新失败)。
// Fetches a Todo object with id 5 and flips its `completed` booleancache.updateQuery({ // options objectquery: gql`query ReadTodo($id: ID!) {todo(id: $id) {idtextcompleted}}`,variables: {id: 5}}, (data) => ({ // update functiontodo: {...data.todo,completed: !data.todo.completed}}));
接受一个options
对象和一个更新函数作为参数(两者均列于下文)。
选项
名称 / 类型 | 描述 |
---|---|
| 必须。定义要获取的数据形状的GraphQL 查询。该查询由将查询字符串包围在 |
| 需要由 |
| 使用 默认值为 通过指定另一个缓存的物体 |
| 如果为 默认值为 |
| 如果为 默认值为 |
updateQuery
更新函数
更新函数updateQuery接收一个查询的当前缓存值,并返回应替换该值的值(或者如果无需更改,则返回undefined
)。
返回的值将自动传递到writeQuery
,该函数会修改缓存数据。
请注意,update
函数必须以不可变的方式计算新值。有关不可变更新的更多信息,请参阅React官方文档。
签名
public updateQuery<TData = any, TVariables = any>(options: Cache.UpdateQueryOptions<TData, TVariables>,update: (data: TData | null) => TData | null | void,): TData | null
readFragment
读取由提供的GraphQL片段:从缓存中读取数据。
const todo = cache.readFragment({id: '5', // The value of the to-do item's unique identifierfragment: gql`fragment MyTodo on Todo {idtextcompleted}`,});
返回请求的数据或null
,如果缓存中不存在数据。
有关使用说明,请参阅与缓存数据交互:readFragment
。
接受以下参数
选项
名称 / 类型 | 描述 |
---|---|
| 必需。要读取片段的对象的ID。 如果缓存中没有包含指定ID的对象, |
| 必需。一个使用 如果文档包含多个片段,您还必须提供 |
| 在 如果 |
| 用于 |
| ⚠️ 已废弃: 使用 如果 默认值为 |
签名
readFragment<FragmentType, TVariables = any>(options: DataProxy.Fragment<TVariables>,optimistic: boolean = false,): FragmentType | null
writeFragment
将数据以提供的 GraphQL 片段 的形式写入缓存。返回写入对象的 Reference
或者在写入失败时返回 undefined
。
client.writeFragment({id: 'Todo:5',fragment: gql`fragment MyTodo on Todo {completed}`,data: {completed: true,},});
有关使用说明,请参阅 交互缓存数据:writeFragment
。
接受一个参数为options
对象的函数。此对象支持的字段如下所述。
选项
名称 / 类型 | 描述 |
---|---|
| 必需。此调用以写入片段的缓存对象 ID。 如果缓存不包含指定 ID 的对象,则 |
| 必需。使用 如果文档包含多个片段,您还必须提供 |
| 必需。要写入缓存的 data。此对象的 fields 必须符合 |
| 在 如果 |
| 用于 |
| 如果为 默认值为 |
| 如果为 默认值为 |
签名
writeFragment<TData = any, TVariables = any>(options: Cache.WriteFragmentOptions<TData, TVariables>,): Reference | undefined
watchFragment
自3.10.0
根据指定的选项监视片段的缓存存储,并返回一个 Observable
。我们可以订阅此 Observable
,并在缓存存储更改时通过观察者接收到更新结果。
你必须传入一个包含单个片段的 GraphQL document 或一个包含多个片段的 document,这些片段代表你要读取的内容。如果你传入一个包含多个片段的 document,那么你也必须指定一个 fragmentName
。
签名
function watchFragment(options: WatchFragmentOptions<TFragmentData, TVariables>): Observable<WatchFragmentResult<TFragmentData>>
参数
options
WatchFragmentOptions<TFragmentData, TVariables>
一个类型为 WatchFragmentOptions
的对象,它允许缓存识别片段并且可以可选地指定是否响应乐观更新。
显示/隐藏子属性
DocumentNode | TypedDocumentNode<TFragmentData, TVariables>
一个使用 gql
模板字面标记解析的 GraphQL 片段 document 到 AST 的片段。
StoreObject | Reference | string
一个包含 __typename
和主键 fields(例如 id
)的对象,它标识了要从中检索片段的实体对象,或者一个 { __ref: "..." }
引用,或者一个 string
ID(不常见)。
string
在片段 document 中定义的片段 名称。
如果片段 document 包含多个片段,则为必需,否则为可选。
boolean
如果为 true
,则 watchFragment
返回乐观结果。
默认值为true
。
TVariables
任何变量,该 GraphQL 片段可能依赖于它们。
结果
Observable<WatchFragmentResult<TFragmentData>>
updateFragment
自3.5
从缓存中以提供的 GraphQL 片段形式检索数据,然后更新根据提供的更新函数。
返回更新后的结果或null
(如果更新失败)。
// Fetches a Todo object with id 5 and sets its `completed` boolean to trueconst todo = cache.updateFragment({ // options objectid: '5', // The value of the to-do item's unique identifierfragment: gql`fragment MyTodo on Todo {completed}`,}, (data) => ({ ...data, completed: true }) // update function);
接受一个options
对象和一个更新函数作为参数(两者均列于下文)。
选项
名称 / 类型 | 描述 |
---|---|
| 必需。要读取片段的对象的ID。 如果缓存中没有指定 ID 的对象, |
| 必需。用于读取片段的 如果文档包含多个片段,您还必须提供 |
| 在 如果 |
| 用于 |
| 如果为 默认值为 |
| 如果为 默认值为 |
updateFragment
更新函数
updateFragment
的更新函数接受一个片段当前缓存值,并返回应替换它的值(或者undefined
如果没有变化应进行)。
返回的值将自动传递给writeFragment
,它修改缓存数据。
请注意,update
函数必须以内敛的方式计算新值。您可以在React 文档中了解更多关于内敛更新的信息。
签名
public updateFragment<TData = any, TVariables = any>(options: Cache.UpdateFragmentOptions<TData, TVariables>,update: (data: TData | null) => TData | null | void,): TData | null
identify
为指定的缓存对象返回规范 ID。
您可以为此函数提供对象或此对象引用:
- 如果您提供对象,
identify
返回基于字符串的对象 ID(例如,Car:1
)。 - 如果您提供引用,
identify
返回引用的__ref
ID 字符串。
有关使用说明,请参阅与缓存数据交互:标识缓存实体。
接受以下参数
名称 / 类型 | 描述 |
---|---|
| 必需。要获取规范 ID 的缓存对象(或对象引用)。 |
签名
identify(object: StoreObject | Reference): string | undefined
modify
修改一个或多个缓存对象的字段值。必须为要修改的每个字段提供修改函数。修改函数接受缓存字段的当前值并返回应该替换它的值。
如果缓存修改成功返回 true
,否则返回 false
。
有关使用说明,请参阅使用 cache.modify
。
接受一个参数为options
对象的函数。此对象支持的字段如下所述。
选项
名称 / 类型 | 描述 |
---|---|
| 必需。一个映射,指定了对每个修改的缓存对象字段调用的修改器函数。 见下面的修改器函数API。 |
| 要修改的缓存对象的ID。 默认值是 |
| 如果为 默认值为 |
| 如果为 默认值为 |
修改器函数API
修改器函数接受一个缓存字段的当前值,并返回替换它的值,或者返回DELETE
哨兵对象来完全删除该字段。
传递给修改器函数的第一个参数是正在修改的字段的当前缓存值。
第二个参数是一个包含以下实用工具的帮助器对象
名称 / 类型 | 描述 |
---|---|
| 正在修改的字段名称。 |
| 字段在内部使用的完整键,包括序列化键参数。 |
| 读取修改器函数作为第一个参数传递的对象上其他字段的辅助函数。 |
| 返回 用于从列表中过滤悬挂引用很有用。 |
| 返回 |
| 你可以从修改器函数中返回的哨兵对象来指示应该完全删除该字段。 |
签名
modify(options: Cache.ModifyOptions): boolean
gc
执行缓存中不可达的规范化对象的垃圾回收。
cache.gc();
返回包含从缓存中移除的所有对象的ID的数组。
有关使用说明,请参阅cache.gc
。
签名
gc()
evict
要么从缓存中删除规范化对象,要么从缓存中的规范化对象中删除特定字段:
cache.evict({ id: 'my-object-id', fieldName: 'myFieldName' });
如果从缓存中删除了数据,返回true
,否则返回false
。
有关使用说明,请参阅cache.evict
。
接受一个参数为options
对象的函数。此对象支持的字段如下所述。
选项
名称 / 类型 | 描述 |
---|---|
| 要删除的缓存对象ID(或从缓存中删除字段)。 默认值为 |
| 从缓存对象中删除的字段名称。 如果要从对象中删除整个对象,则省略此选项。 |
| 如果与 否则,将移除缓存的字段的所有实例。 |
| 如果 默认值为 |
签名
evict(options: Cache.EvictOptions): boolean
提取
返回缓存当前内容序列化的表示形式,作为NormalizedCacheObject
。
接受以下参数
名称 / 类型 | 描述 |
---|---|
| 如果 默认值为 |
签名
extract(optimistic: boolean = false): NormalizedCacheObject
恢复
从序列化的NormalizedCacheObject
(例如extract
返回的)中恢复缓存的状态。这将移除缓存中的所有现有数据。
返回被调用实例的InMemoryCache
实例。
接受以下参数
名称 / 类型 | 描述 |
---|---|
| 必需。恢復缓存的序列化。 |
签名
restore(data: NormalizedCacheObject): this
makeVar
创建一个具有可选初始值的响应式变量:
const cartItems = makeVar([]);
返回用于读取或修改变量值的响应式变量函数。
有关使用说明,请参阅响应式变量。
接受以下参数
名称 / 类型 | 描述 |
---|---|
| 响应式变量的初始值。 |
签名
makeVar<T>(value: T): ReactiveVar<T>