【发布时间】:2019-06-28 23:09:03
【问题描述】:
所以,我有一个会话查询,用于在登录时加载。因为负载太多了(是的,加载了大量的应用程序数据),我把这个“会话”减少了很多。但是,我现在遇到的问题是,当我进行突变时,我无法更新会话,因为似乎只有我声明的字段被更新,而突变中的其他所有内容都被忽略了。
注意:我想从客户端突变更新。
所以,我有这样的事情:
@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
}
}
}
数据量很大,所以我真的把它删减了。现在,我的突变根据用户“添加”的内容创建了一个“新”项目。
这就是问题所在,假设用户“创建了一件衬衫”,但是通过该突变,用户创建了“尺寸”、“价格”、“优惠券代码”等。所以,我想要我的“衬衫”数组在这种情况下,将更新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(这似乎有点多)那么回避。
【问题讨论】:
标签: graphql