【发布时间】:2018-08-13 13:48:56
【问题描述】:
每次我在我的应用程序中添加一个新项目时,突变都会调用update() 四次次,出于某种原因。前两个是乐观数据,第二批,一个是乐观数据,一个是来自网络的真实数据。我无法理解这一点。正在创建的新项目在页面上显示两次。
这是我的突变:
mutation CreateTrack($name: String!, $trackNum: Int, $s3Key: String!) {
createTrack(name: $name, trackNum: $trackNum, s3Key: $s3Key) {
trackId
name
createdAt
duration
trackNum
s3Key
isProcessing
didProcessingFail
}
}
这是变异代码:
createTrack({ name, s3Key }) {
const newTrack = {
name,
s3Key,
};
this.$apollo
.mutate({
mutation: createTrackMutation,
variables: newTrack,
update: (store, { data: { createTrack } }) => {
console.log('this is dumb', JSON.stringify(createTrack, null, 2));
const variables = {
limit: this.pageSize,
order: this.order === 'ascending' ? 'asc' : 'desc',
sortBy: this.sortBy,
};
const data = store.readQuery({
query: listTracksQuery,
variables,
});
data.listTracks.items.push(createTrack);
store.writeQuery({
query: listTracksQuery,
variables,
data,
});
},
optimisticResponse: {
__typename: 'Mutation',
createTrack: {
__typename: 'Track',
...newTrack,
trackId: '??',
createdAt: new Date().toISOString(),
isProcessing: true,
didProcessingFail: false,
duration: null,
trackNum: 999,
},
},
})
.then(data => {
console.log('done!', data);
})
.catch(err => {
console.log('error', err);
});
},
最后,这里是调用 mutate 一次的控制台日志:
this is dumb {
"__typename": "Track",
"name": "small2.wav",
"s3Key": "staging/audio/10e3e675-e7a6-41dc-a8fb-686ad683e40e.wav",
"trackId": "??",
"createdAt": "2018-03-05T03:30:18.246Z",
"isProcessing": true,
"didProcessingFail": false,
"duration": null,
"trackNum": 999
}
this is dumb {
"__typename": "Track",
"name": "small2.wav",
"s3Key": "staging/audio/10e3e675-e7a6-41dc-a8fb-686ad683e40e.wav",
"trackId": "??",
"createdAt": "2018-03-05T03:30:18.246Z",
"isProcessing": true,
"didProcessingFail": false,
"duration": null,
"trackNum": 999
}
done! {data: {...}}
this is dumb {
"__typename": "Track",
"name": "small2.wav",
"s3Key": "staging/audio/10e3e675-e7a6-41dc-a8fb-686ad683e40e.wav",
"trackId": "??",
"createdAt": "2018-03-05T03:30:18.246Z",
"isProcessing": true,
"didProcessingFail": false,
"duration": null,
"trackNum": 999
}
this is dumb {
"trackId": "2b3de8ac-d145-4da6-b522-27e5413d43e1",
"name": "small2.wav",
"createdAt": "2018-03-05T03:30:18.627Z",
"duration": null,
"trackNum": 999,
"s3Key": "staging/audio/10e3e675-e7a6-41dc-a8fb-686ad683e40e.wav",
"isProcessing": true,
"didProcessingFail": null,
"__typename": "Track"
}
我在这里做错了什么?
【问题讨论】:
-
我认为这与我在此处描述的问题相同:stackoverflow.com/a/48989517/2805067 我认为 PR(在此处的评论中)修复了一个未调用
update的相关问题。所以现在你看到它是从aws-appsync内部创建的第二个突变中调用的(第 3 次和第 4 次)。 -
所以 PR 解决了一个问题,但又创造了另一个问题,也许吧?该项目在网页上显示了两次,这不应该发生。
-
我已经编辑了我的帖子,以澄清数据在页面上的显示方式存在实际问题。所以这不仅仅是内部问题。
-
我不认为 PR 创造了一个新问题。这只是部分修复。
标签: apollo apollo-client aws-appsync vue-apollo