更新阿波罗店变异列表过滤
问题描述:
时,我有一个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)?
(除了按状态枚举所有列表和删除,如果我找到它的更新的条目......),你需要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 })
})
})
});