与问题here类似,我发现当使用optimisticResponse并更新突变时,从服务器响应中设置的id是错误的。此外,id实际上是通过再次运行optimistic函数来设置的。
在下面的变异中,refetchQueries是故意注释掉的。我不想用它。我想通过 update 来管理所有内容。
另请注意,optimisticResponse id前面有一个“ - ”来证明乐观函数运行两次:
id: "-" _ uuid()
,
突变
graphql(MutationCreateChild, {
options: {
// refetchQueries: [{QueryAllChildren, variables: {limit: 1000}}],
update: (proxy, {data: {createChild}}) => {
const query = QueryAllChildren;
const data = proxy.readQuery({query});
data.listChildren.items.push(createChild);
proxy.writeQuery({query, data});
console.log("id: ", createChild.id);
}
},
props: props => ({
createChild: child => {
return props.mutate({
variables: child,
optimisticResponse: () => ({
createChild: {
...child,
id: "-" + uuid(),
__typename: "Child"
}
})
});
}
})
})
console.log语句的输出是:
id: -6c5c2a28-8bc1-49fe-92e1-2abade0d06ca
id: -9e0a1c9f-d9ca-4e72-88c2-064f7cc8684e
虽然chrome开发者控制台中的实际请求如下所示:
{"data":{"createChild":{"id":"f5bd1c27-2a21-40c6-9da2-9ddc5f05fd40",__typename":"Child"}}}
这是一个错误还是我没有在更新功能中正确访问id?
答案 0 :(得分:1)