在进行节点查询时,react-relay 会在发出网络请求之前检查该节点是否在商店中吗?
When making a node query, will react-relay check if that node is in the store before making a network request?
如果我创建一个具有以下架构的 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
}
}
}
returns以下
{
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,因此未引用的记录最终将从 "cache" 中删除。
中继的实验性 功能的文档表明在等待网络时会有 store-only
option and APIs to manually retain data in the cache, as well as ways to render partial data。
如果我创建一个具有以下架构的 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
}
}
}
returns以下
{
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,因此未引用的记录最终将从 "cache" 中删除。
中继的实验性 功能的文档表明在等待网络时会有 store-only
option and APIs to manually retain data in the cache, as well as ways to render partial data。