我正在构建一个反应应用程序,我有一个数据表并直接在我想要的数据流上更新,当我将数据发送到 graphql 服务器进行更新并获取true
结果然后我将更新 apollo 缓存cache.writeQuery
- 问题是当下面的代码执行时,还有一个请求graphql服务器从整个表中获取数据并更新缓存,我不想请求graphql服务器工作。在那里,我想从浏览器更新。那么我哪里做错了?
这是我的代码
updateInventoryCache: async (_, { inventory, productId, variables }, { cache }) => {
let variablesData;
if (variables) {
variablesData = JSON.parse(variables);
}
const { getListProduct } = cache.readQuery({
query: GET_PAGING_PRODUCT,
variables: variablesData.variables
});
cache.writeQuery({
query: GET_PAGING_PRODUCT,
variables: variablesData.variables,
data: {
getListProduct: {
...getListProduct,
products: getListProduct.products.map((product) => {
if (product.id === productId) {
return {
...product,
inventory
};
}
return product;
})
}
}
});
return true;
}
"@apollo/client": "^3.3.7"
更新1:
我将首先调用 graphql 服务器来获取数据并将其存储在 apollo 的(缓存和网络)缓存中。然后我想更新缓存中的数据,而不必调用 apollo 服务器到refetchQueries
如在帖子中,我使用该client.writeQuery
函数更新缓存,但不是在客户端更新,apollo 调用 graphql 服务器来获取新数据并更新我不使用时的缓存refetchQueries
。
更新 2:我检查了,我的缓存已更新,但我的 UI 没有重新渲染