最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

阿波罗查询具有从缓存中的数据错误

运维笔记admin8浏览0评论

阿波罗查询具有从缓存中的数据错误

阿波罗查询具有从缓存中的数据错误

阿波罗查询从缓存中有我反应过来的应用程序错误的数据。

如果我设置查询的fetchPolicy为“网络只有”,一切都正常工作。

所以,我认为这是一个缓存的问题。

我一直在努力试图解决这个问题,看到阿波罗缓存的文章,但我还是解决不了问题。

这里是我的查询结果后:

参数MEMBERID为空(结果正确)

[
  {
    "id": 87,
    "totalQuantity": 12,
    "Orders": [
      {
        "id": 1,
        "quantity": 11,
        "Member": {
          "id": 1,
          "name": "A"
        }
      },
      {
        "id": 28,
        "quantity": 1,
        "Member": {
          "id": 9,
          "name": "B"
        }
      }
    ]
  },
  {
    "id": 88,
    "totalQuantity": 1,
    "Orders": [
      {
        "id": 2,
        "quantity": 1,
        "Member": {
          "id": 1,
          "name": "A"
        }
      }
    ]
  }
]

参数MEMBERID是9(结果是正确的)

[
  {
    "id": 87,
    "totalQuantity": 1,
    "Orders": [
      {
        "id": 28,
        "quantity": 1,
        "Member": {
          "id": 9,
          "name": "B"
        }
      }
    ]
  }
]

参数MEMBERID为1(结果是正确的)

[
  {
    "id": 87,
    "totalQuantity": 11,
    "Orders": [
      {
        "id": 1,
        "quantity": 11,
        "Member": {
          "id": 1,
          "name": "A"
        }
      }
    ]
  },
  {
    "id": 88,
    "totalQuantity": 1,
    "Orders": [
      {
        "id": 2,
        "quantity": 1,
        "Member": {
          "id": 1,
          "name": "A"
        }
      }
    ]
  }
]

但是当我回到参数为空的结果是错误的

[
  {
    "id": 87,
    "totalQuantity": 11,
    "Orders": [
      {
        "id": 1,
        "quantity": 11,
        "Member": {
          "id": 1,
          "name": "A"
        }
      }
    ]
  },
  {
    "id": 88,
    "totalQuantity": 1,
    "Orders": [
      {
        "id": 2,
        "quantity": 1,
        "Member": {
          "id": 1,
          "name": "A"
        }
      }
    ]
  }
]

构件B(ID = 9)是消失..

我回到参数是9(结果不正确)

[
  {
    "id": 87,
    "totalQuantity": 11,
    "Orders": [
      {
        "id": 1,
        "quantity": 11,
        "Member": {
          "id": 1,
          "name": "A"
        }
      }
    ]
  }
]

我得到的部件的数据,而不是部件B

有人能帮我吗?谢谢


我的客户端配置(缓存InMemoryCache)

const client = new ApolloClient({
  link: ApolloLink.from([
    httpLink,
  ]),
  cache,
  dataIdFromObject: o => ${o.id}${o.__typename},
});

我用queryHook来包装我的组件

const queryHook = graphql(FETCH_ORDER_GROUP_SHIPMENT_LIST, {
  options: ownProps => ({
  variables: {
    memberId: ownProps.options.memberId || null,
  },
}),
  props: ({
    data: {
      orderGroupShipmentList,
    },
  }) => ({
    orderGroupShipmentList: orderGroupShipmentList || [],
  });

此外,我使用查询标签(其它数据)来包装我的内容

其参数MEMBERID为好。

结构是这样

<Query
  variables={{ memberId: options.memberId || null }}
  query={FETCH_MEMBER_LIST_QUERY}>
  content that use orderGroupShipmentList and memberList
</Query>

我不知道这是不是不够具体

让我知道这是不够具体

谢谢


2019-09-16

对于那些谁面临同样的问题:

回答如下:

你需要有不同的ID为该类型上为您的查询返回的结果。例如,您可以基于MEMBERID ID 87不同的结果,所以缓存会被你的第二个查询被覆盖,因为阿波罗不会重新获取已经默认进行的查询,它将继续看改写结果。

发布评论

评论列表(0)

  1. 暂无评论