阿波罗查询具有从缓存中的数据错误
阿波罗查询从缓存中有我反应过来的应用程序错误的数据。
如果我设置查询的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不同的结果,所以缓存会被你的第二个查询被覆盖,因为阿波罗不会重新获取已经默认进行的查询,它将继续看改写结果。