【问题标题】:When making a node query, will react-relay check if that node is in the store before making a network request?在进行节点查询时,react-relay 会在发出网络请求之前检查该节点是否在存储中吗?
【发布时间】:2020-03-22 12:02:53
【问题描述】:

如果我创建一个具有以下架构的 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 会向服务器发出请求吗?还是足够聪明地知道我们已经在缓存中拥有了所请求项目的所有数据?

【问题讨论】:

    标签: relayjs relay relaymodern react-relay


    【解决方案1】:

    根据documentation,默认行为network-only 不使用缓存,而是始终从服务器获取新结果。您可以通过指定 store-and-network 中的 fetchPolicy 来更改此设置,这将首先使用缓存的结果并同时从网络中获取新数据。

    同样重要的是要知道,中继在其存储中执行garbage collection,因此未引用的记录最终将从“缓存”中删除。

    relay experimental 功能的文档表明,在等待网络时,缓存中会有store-only 选项和manually retain data 的API,以及render partial data 的方法.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多