如果创建具有以下架构的graphql服务器:
type Node {
id: ID!
}
type User implements Node {
id: ID!
groups: [group!]!
}
type Group implements Node {
id: ID!
name: String!
}
type Query {
me: User!
node(id: ID!): Node
}
稍后使用react-relay进行以下查询:
query {
me {
groups {
id
name
}
}
}
返回以下内容
{
me: {
groups: [{
id: '1',
name: 'food lovers'
}]
}
}
如果稍后在我的应用程序中,我按如下所述进行另一个查询
query {
node(id: "1") {
... on Group {
id
name
}
}
}
react-relay是否会向服务器发出请求?还是足够聪明地知道我们已经在缓存中保存了所请求项目的所有数据?
根据documentation,默认行为network-only
是不使用缓存,而是始终从服务器获取新结果。您可以通过指定fetchPolicy
的store-and-network
来更改此设置,该设置将首先使用缓存的结果并并行从网络中获取新数据。
同样重要的是要知道,中继在其存储上执行garbage collection,因此最终未从“缓存”中删除未引用的记录。
中继的实验性功能的文档指出,在等待网络时,缓存中将有一个store-only
选项和store-only
的API,以及manually retain data的方式。