【发布时间】:2020-12-24 00:23:26
【问题描述】:
我有一些关于如何将 apollo 客户端缓存与我们组织查询的特定方式相匹配的问题。
因此,我们组织查询的方式是将同一资源上的查询分组到单个命名空间下。例如。我们有两个资源,users 和 accounts,我们的查询看起来像这样。
type Query {
user: UserQueries
account: AccountQueries
}
type UserQueries {
all: [User!]!
byId(id: ID!): User
}
type AccountQueries {
all: [Account!]!
byId(id: ID!): Account
}
type User {...}
type Account {...}
由于Queries 类型都没有提供ID 字段,默认情况下UserQueries 下的第二个查询的响应将替换缓存中第一个查询的数据,即首先我进行all 查询,然后我' 将取回一些存储在缓存中 user 字段下的数据。然后如果我进行byId 查询,user 下缓存中的数据将被新数据替换。
关于这个过程的一些问题:
- 我注意到,即使
all数据被byId数据替换后,之前获取的用户(规范化的用户)仍然在缓存中可用,当我认为它们将被垃圾收集时,因为引用是丢失。垃圾收集器是否不会立即对它们进行垃圾收集,而是以一定的节奏运行?还是我完全误解了 gc 的工作原理? - 除了为查询 types
user生成唯一 ID 之外,还有其他方法可以保留两个响应吗? - 这样命名空间查询是个好主意吗?
谢谢各位!
【问题讨论】:
-
你知道多少好的命名空间 API?
标签: graphql apollo apollo-client