如何强制Apollo客户端使用缓存数据

如何强制Apollo客户端使用缓存数据,apollo,react-apollo,apollo-client,Apollo,React Apollo,Apollo Client,我们有一个应用程序,最初加载一个小部件列表: query Widgets() { widgets() { ...Widgets } } fragment Widgets on Widgets { name description rootWidget widgets { ...WidgetInterface } } fragment WidgetInterface on WidgetInterface {

我们有一个应用程序,最初加载一个小部件列表:

query Widgets() {
    widgets() {
        ...Widgets
    }
}

fragment Widgets on Widgets {
    name
    description
    rootWidget
    widgets {
        ...WidgetInterface
    }
}

fragment WidgetInterface on WidgetInterface {
    id
    name
    description
    type
}
稍后我将呈现这个小部件,其中每个react组件都使用另一个graphql调用进行包装,以获取单个小部件的数据。当我们最初获取这些数据时,我希望apollo从本地存储中获取数据,但它总是进行服务器调用

#import '../fragments/WidgetInterface.graphql'

query Widget($id: ID!) {
    widgetDetails(id: $id) {
        ...WidgetInterface
    }
}

那么,有没有办法检查apollo为什么不使用缓存的结果呢?

apollo通过查询来缓存您的查询结果。它从服务器而不是缓存中获取数据的原因是,第一次呈现组件时,您从未进行过
widgetDetails
查询,只有
widgets
查询

如果要避免进行
widgetDetails
查询,可以将组件设置为使用
widgets
查询,只需自己按id过滤结果即可。比如:

graphql(WIDGETS_QUERY, {
  props: ({data, ownProps}) => ({ widget: data.widgets.filter(w => w === ownProps.widgetId) })
})(MyComponent)

因此,没有办法直接通过标识符获取数据?因为这就是我从这篇文章中了解到的:我还想知道如何在列表中添加新的小部件以强制和强制重新排序。刚刚了解了
mutate
中的
update
函数。工作起来很有魅力。@AndreasKöberle我也面临着同样的问题,你有没有找到好的解决方案,或者选择了这个解决方案?如果有人仍在寻找答案,你可以在这里查看我的问题和回答