在进行节点查询时,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 是不使用缓存,而是始终从服务器获取新结果。您可以通过指定 fetchPolicystore-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