Javascript 更改列表筛选器时更新Apollo存储

Javascript 更改列表筛选器时更新Apollo存储,javascript,graphql,apollo,react-apollo,Javascript,Graphql,Apollo,React Apollo,我有一个如下所示的graphql模式: type User { entries(status: EntryStatus): [Entry] } type Mutation { updateEntry(status: EntryStatus): Entry } 我可以按状态(即枚举)筛选条目列表,并可以更新条目的状态。我想在更新状态时更新存储,以便条目显示在右侧列表中(entries(status:FOO)到entries(status:BAR)) 我知道我可以用这个方

我有一个如下所示的graphql模式:

type User {
    entries(status: EntryStatus): [Entry]
}

type Mutation {    
    updateEntry(status: EntryStatus): Entry
}
我可以按状态(即枚举)筛选条目列表,并可以更新条目的状态。我想在更新状态时更新存储,以便条目显示在右侧列表中(
entries(status:FOO)
entries(status:BAR)

我知道我可以用这个方法更新存储

但是由于我无法访问
更新中的旧数据(以前的条目.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 })
      })
  })
});
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 })
      })
  })
});