我正在尝试乐观地更新UI,为此我正在使用道具和更新功能。但是,我收到警告,例如缺少字段“ _id”,“所有者”,“元”和“评论”。我还附有警告屏幕截图。我该如何解决以下问题?
这是代码
const withMutations = graphql(CommentMutation, {
options: () => ({
...getDefaultOptions('collaboration')
}),
props: ({ ownProps, mutate }) => {
return {
submitComment: ({ value }) =>
mutate({
variables: {
commentData: {
comment: value
}
},
optimisticResponse: {
__typename: 'Mutation',
addComment: {
__typename: 'CommonResponse',
_id : -1,
id : null,
comment : value,
meta : ownProps.data[0].meta,
owner : ownProps.data[0].owner,
status : 'success',
message : 'Comment successfully added.',
action : 'AddComment',
},
},
// optimisticResponse: {
// __typename: 'Mutation',
// addComment: {
// __typename: 'CommonResponse',
// id : -1,
// status : 'success',
// message : 'Comment successfully added.',
// action : 'AddComment',
// },
// },
update: (store, { data }) => {
const data2 = store.readQuery({ query: CommentsQuery });
data2.comments.unshift(data.addComment);
store.writeQuery({ query: CommentsQuery, data: data2 });
},
}),
};
},
});
我在这里有完整的代码
https://gist.github.com/SanskarSans/907063ed9a27d3f38f7de25ca4072faf
最佳答案
好吧,你将不得不传递一些东西。例如,只需使用shortId生成一个临时ID。当来自服务器的数据到达时,乐观数据将回滚,所以这不是问题。如果您尚不知道该评论,并已正确地将prop声明为可选,则只需在乐观回复中将其声明为null。