Graphql Apollo客户端/AWS AppSync JavaScript SDK更改查询结果
我正在使用AppSync控制台执行一个正确返回的简单查询,但是当我从应用程序中执行相同的查询时,数据返回错误。具体来说,返回的对象中有一个子类型的数组,虽然数组中的实例数正确,但每个实例都是第一个实例的副本 我已经禁用了客户端上的本地缓存,并从数据库中的数组中删除了第一个实例,当我在控制台中运行查询时,它工作正常,但问题仍然存在于应用程序中(尽管现在正在复制新的第一个实例) 控制台输出:Graphql Apollo客户端/AWS AppSync JavaScript SDK更改查询结果,graphql,apollo,aws-appsync,Graphql,Apollo,Aws Appsync,我正在使用AppSync控制台执行一个正确返回的简单查询,但是当我从应用程序中执行相同的查询时,数据返回错误。具体来说,返回的对象中有一个子类型的数组,虽然数组中的实例数正确,但每个实例都是第一个实例的副本 我已经禁用了客户端上的本地缓存,并从数据库中的数组中删除了第一个实例,当我在控制台中运行查询时,它工作正常,但问题仍然存在于应用程序中(尽管现在正在复制新的第一个实例) 控制台输出: { "data": { "getTemplates": [ { "n
{
"data": {
"getTemplates": [
{
"name": "test template",
"data": [
{
"name": "Assigned User",
"format": "String"
},
{
"name": "Office",
"format": "String"
},
{
"name": "Department",
"format": "String"
}
]
}
]
}
}
应用程序的浏览器日志输出:
0
:
{id: null, name: "Assigned User", format: "String", __typename: "Field", Symbol(id): "Field:null"}
1
:
{id: null, name: "Assigned User", format: "String", __typename: "Field", Symbol(id): "Field:null"}
2
:
{id: null, name: "Assigned User", format: "String", __typename: "Field", Symbol(id): "Field:null"}
查询和记录代码:
<Query query={getTemplatesQuery}>
{({ loading, error, data }) => {
if (loading) return null;
if (error) return `Error: ${error}`;
console.log(data);
console.log(data.getTemplates);
return (
<DataTable data={data.getTemplates} />
);
}}
</Query>
有人能告诉我是什么导致了这一切吗?有没有一种简单的方法可以从另一个客户端测试这一点?Apollo的缓存执行以下操作:
默认情况下,InMemoryCache将尝试使用常见的id
和\u id
主键作为唯一标识符(如果它们与对象上的\u typename
一起存在)
由于返回的结果没有id字段,因此对于所有结果,用于它们的键都是“field:null”
这种情况下的解决方案是在字段
子项中返回一个id(在粘贴的日志中,其值为null
)。或者,使用dataIdFromObject
向缓存提示如何为对象生成缓存键
{
getTemplates {
id
name
author
data {
id
name
format
}
}
}