【发布时间】:2018-09-25 12:25:50
【问题描述】:
我正在调用 readQuery。我收到一条错误消息:
modules.js?hash=2d0033b4773d9cb6f118946043f7a3d4385825fe:25847
Error: Can't find field resolutions({"id":"Resolution:DHSzPa8bvPCDjuAac"})
on object (ROOT_QUERY) {
"resolutions": [
{
"type": "id",
"id": "Resolution:AepgCCio9KWGkwyMC",
"generated": false
},
{
"type": "id",
"id": "Resolution:DHSzPa8bvPCDjuAac", // <==ID I'M SEEKING
"generated": false
}
],
"user": {
"type": "id",
"id": "User:WWv57KsvqWeAoBNHY",
"generated": false
}
}.
具有该 id 的对象作为分辨率列表中的第二个条目似乎是显而易见的。
这是我的查询:
const GET_CURRENT_RESOLUTION_AND_GOALS = gql`
query Resolutions($id: String!) {
resolutions(id: $id) {
_id
name
completed
goals {
_id
name
completed
}
}
}
`;
...我是这样称呼它的:
<Mutation
mutation={CREATE_GOAL}
update={(cache, {data: {createGoal}}) => {
let id = 'Resolution:' + resolutionId;
const {resolutions} = cache.readQuery({
query: GET_CURRENT_RESOLUTION_AND_GOALS,
variables: {
id
},
});
}}
>
我错过了什么?
更新
根据 Chrome 的 GraphQL 开发工具扩展,这是整个 GraphQL 数据存储:
{
"data": {
"resolutions": [
{
"_id": "AepgCCio9KWGkwyMC",
"name": "testing 123",
"completed": false,
"goals": [
{
"_id": "TXq4nvukpLcqQhMRL",
"name": "test goal abc",
"completed": false,
"__typename": "Goal"
},
],
"__typename": "Resolution"
},
{
"_id": "DHSzPa8bvPCDjuAac",
"name": "testing 345",
"completed": false,
"goals": [
{
"_id": "PEkg5oEEi2tJ6i8LH",
"name": "goal abc",
"completed": false,
"__typename": "Goal"
},
{
"_id": "X4H4dFzGm5gkq5bPE",
"name": "goal bcd",
"completed": false,
"__typename": "Goal"
},
{
"_id": "hYunrXsMq7Gme7Xck",
"name": "goal cde",
"completed": false,
"__typename": "Goal"
}
"__typename": "Resolution"
}
],
"user": {
"_id": "WWv57KsvqWeAoBNHY",
"__typename": "User"
}
}
}
【问题讨论】:
-
你试过没有
Resolution:,因为这似乎是apollo添加到每个id的前缀。使用与查询时相同的id。 -
是的,我尝试了两种方法,在 id 中添加和不添加“Resolution:”。
-
解析对象的 __typename 是什么?也许使用 readFragment 代替:apollographql.com/docs/react/advanced/caching.html#readfragment
-
我通过 readQuery 寻找的对象的类型名称是“Resolution”。难道我不能单独通过 readQuery 找到它吗?
-
@Herku,非常感谢。如果您想发表您的评论作为答案,我会将其标记为已接受的答案。
标签: graphql apollo graphql-js apollo-client