更新阿波罗店变异列表过滤

问题描述:

时,我有一个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 }) 
     }) 
    }) 
});