【发布时间】:2017-05-30 15:50:52
【问题描述】:
我有一个在创建或更新时触发的 upsert 查询。在更新时,Apollo 会将结果整合到缓存中,但在创建时不会。
这里是查询:
export const UPSERT_NOTE_MUTATION = gql`
mutation upsertNote($id: ID, $body: String) {
upsertNote(id: $id, body: $body) {
id
body
}
}`
我的客户:
const graphqlClient = new ApolloClient({
networkInterface,
reduxRootSelector: 'apiStore',
dataIdFromObject: ({ id }) => id
});
来自服务器的响应是相同的:id 和 body 都返回了,但 Apollo 不会自动将新 id 添加到 data 缓存对象中。
是否可以让 Apollo 自动将新对象添加到 data 而不会触发后续提取?
这是我的数据存储的样子:
更新
根据文档,updateQueries 函数应该允许我将新元素推送到我的资产列表中,而无需再次触发我的原始获取查询。
函数被执行,但函数返回的任何内容都被完全忽略,缓存没有被修改。
即使我这样做:
updateQueries: {
getUserAssets: (previousQueryResult, { mutationResult }) => {
return {};
}
}
没有任何变化。
更新 #2
仍然无法更新我的资产列表。
在updateQueries 内部,这是我的previousQueryResult 的样子:
updateQueries: {
getUserAssets: (previousQueryResult, { mutationResult }) => {
return {
assets: []
.concat(mutationResult.data.upsertAsset)
.concat(previousQueryResult.assets)
}
}
}
但是无论我返回什么,数据存储都不会刷新:
作为参考,下面是每个 asset 的样子:
【问题讨论】:
标签: javascript react-redux apollostack react-apollo apollo-client