我有一个如下所示的graphql架构:
type User {
entries(status: EntryStatus): [Entry]
}
type Mutation {
updateEntry(status: EntryStatus): Entry
}
我可以按状态(这是一个枚举)过滤条目列表,我可以更新条目的状态。我想在状态更新时更新商店,以便条目显示在右侧列表中(entries(status: FOO)
到entries(status: BAR)
)。
我知道我可以使用update
方法更新商店。
const withMutation = graphql(updateEntryMutation, {
props: ({ mutate }) => ({
updateEntry: updateEntryInput =>
mutate({
variables: { updateEntryInput },
update: (proxy, newData) => {
// update data here
// Which would involve removing the entry from its previous filtered "list", and adding it to the one with the new status
})
})
});
但是我怎么知道从哪个列表中删除条目,因为我无法访问update
中的旧数据(之前的entry.status)?
(除了按状态枚举所有列表,如果找到它,删除更新的条目......)
答案 0 :(得分:0)
首先需要store.readQuery()
,然后将新数据写入商店。
有点像这样:
const EntriesQuery = 'yourQueryHere';
const withMutation = graphql(updateEntryMutation, {
props: ({ mutate }) => ({
updateEntry: updateEntryInput =>
mutate({
variables: { updateEntryInput },
update: (store, { data: { updateEntry }}) => {
const data = store.readQuery({ query: EntriesQuery });
data.entries.push(updateEntry)
store.writeQuery({ query: EntriesQuery, data })
})
})
});