因此,我有一个会话查询,用于登录时加载。因为负载太多(是的,正在加载大量应用程序数据),所以我减少了很多“会话”。但是,我现在遇到的问题是,当我进行突变时,我无法更新会话,因为看来只有我声明的字段会被更新,而突变中的所有其他内容都将被忽略。
注意:我想从客户端突变中进行更新。
所以,我有这样的东西:
@graphql(SESSION_QUERY)
class Foo etc....
现在,此会话的模式中的数据有限,如下所示:
query Session {
session {
id
user_id
first_name
last_name
products {
shoes {
id
sizes
}
pants {
id
sizes
}
shirts {
id
sizes
}
}
}
数据量巨大,所以我真的减少了数据量。现在,我的突变会根据用户的“添加”内容创建一个“新”项目。
这是问题所在,可以说用户“创建了一件衬衫”,但是通过THAT突变,用户创建了“尺寸”,“价格”,“优惠券代码”等。因此,我想要我的“衬衫”数组在这种情况下,要更新ala ..
update: (store: ApolloStore, results: *) => {
const data = store.readQuery({ query: SESSION_QUERY });
const products = data.session.products[productType] || [];
data.session.products[productType] =
products.concat(results.data['createProductShirt']);
store.writeQuery({ query: SESSION_QUERY, data });
}
console.logging在写入之前和之后实际上都显示了更新,但是会话从未真正更新过。似乎只对其进行了筛选以仅更新id和大小。我需要更新整个返回集。
基本上,当我的组件获得新道具时,突变更新就不存在了。
即使在架构中未定义特定值,也有办法更新此会话吗?
我宁愿不使用redux,而且我的用法似乎不像使用apollo-link-state(似乎有点多)那样规避。
答案 0 :(得分:2)
您不需要像这样手动更新apollo存储-Apollo缓存应为您保存所有内容,只要它具有在数据之间建立任何关系所需的ID。
您的客户端中的Apollo缓存设置是什么样的? 您是否尝试过使用Apollo Dev-tools来查看缓存中发生了什么?
或者reftechQueries还不足以让您更新从会话查询返回的数据吗?