与此处的问题类似,我发现当使用optimisticResponse 和update 进行突变时,服务器响应中设置的id 是错误的。此外,id 实际上是通过再次运行乐观函数来设置的。
在下面的突变中,refetchQueries 被故意注释掉。我不想用那个。我只想通过更新来管理一切。
另请注意,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?