使用apollo-link-state运行@client变异时,解析器的响应只是:
{ data: {}, errors: undefined }
我从解析器返回
{data: { ...product }}
。
其中乘积是具有多个值的对象,其中
__typename
。
我尝试将返回值设置为各种值,例如
return product
,
return { data: product }
,
return { data: { data: {
product }}}
等。等等。我想你明白。
解析器:
export const updateInventoryItem = async (product, cache) => {
const query = gql
query {
inventory @client {
...omitted, but all the values
}
};
const prevState = await cache.readQuery({ query });
const prevInventory = prevState.inventory;
const productIndex = prevInventory.findIndex(x => x.id ===
product.id);
prevInventory.splice(productIndex, 1);
const data = {
inventory: [
product,
...prevInventory
]
}
await cache.writeQuery({ query, data });
return {data: { ...product }}
}
突变:
const UPDATE_ITEM = gql
mutation updateInventoryItem($product: InventoryItem!) {
updateInventoryItem(product: $product) @client {
__typename
id
...and so on
}
}
;
调用变异的函数:
updateItem = () => {
this.props.updateItem({
variables: {
product: {
__typename: this.state.item.__typename,
id: this.state.item.id,
addedToCart: this.state.item.addedToCart,
...and so on
}
}
}).then((e) => {
console.log(e);
this.setState({ savedRecently: true })
},
err => console.log(err))
}
首先:很抱歉,我要花很长时间才能完成这段代码。
上面代码的预期结果将是让解析器返回刚刚添加的产品,例如
{ data: {...product}, errors: undefined }
,但返回
{ data: {}, errors: undefined }
如开头所述。
如果您需要更多信息,或者我错过了什么,请告诉我。
答案 0 :(得分:1)
const UPDATE_ITEM = gql
mutation updateInventoryItem($product: InventoryItem!) {
return updateInventoryItem(product: $product) @client {
__typename
id
...and so on
}
}
;
此函数当然需要返回一个值,但这不是全部内容。
GraphQL(在这种情况下为Apollo-Client),希望像响应一样形成一个对象,您告诉它是想要的。
在这种情况下:
updateInventoryItem(product: $product) @client {
__typename
id
...and so on
}
这要求获取一个具有__typename,id和其他任何内容的对象。
总而言之,我这是一个愚蠢的错误,但是由于没有答案,如果有人和我一样陷入同样的困境,那么可以尝试一下。