Reactjs 如何使用大量活动查询更新Apollo缓存

Reactjs 如何使用大量活动查询更新Apollo缓存,reactjs,graphql,apollo,react-apollo,graphql-tag,Reactjs,Graphql,Apollo,React Apollo,Graphql Tag,我的Apollo缓存中存储了很多活动查询,例如: items(isPublished: true, orderBy: "name", filterByName: "") items(isPublished: true, orderBy: "name", filterByName: "home") items(isPublished: false, orderBy: "name", filterByName: "home") items(isPublished: true, orderBy: "a

我的Apollo缓存中存储了很多活动查询,例如:

items(isPublished: true, orderBy: "name", filterByName: "")
items(isPublished: true, orderBy: "name", filterByName: "home")
items(isPublished: false, orderBy: "name", filterByName: "home")
items(isPublished: true, orderBy: "age", filterByName: "home")
...
import gql from "graphql-tag";
import { Mutation } from "react-apollo";

const ADD_ITEM = gql`
  mutation AddItem(...
`;

...

<Mutation mutation={ADD_ITEM} variables={...} update={() => ...} />
因此,对于同一个查询(GET\u ITEMS),有许多可能的变量,过滤器越来越多。当我想添加、移动或删除某个项目时,我会使用“突变”组件的属性更新Apollo缓存,例如:

items(isPublished: true, orderBy: "name", filterByName: "")
items(isPublished: true, orderBy: "name", filterByName: "home")
items(isPublished: false, orderBy: "name", filterByName: "home")
items(isPublished: true, orderBy: "age", filterByName: "home")
...
import gql from "graphql-tag";
import { Mutation } from "react-apollo";

const ADD_ITEM = gql`
  mutation AddItem(...
`;

...

<Mutation mutation={ADD_ITEM} variables={...} update={() => ...} />
从“graphql标签”导入gql;
从“反应阿波罗”中导入{突变};
const ADD_ITEM=gql`
突变附加项(。。。
`;
...
...} />
但是,如果我想很好地更新所有缓存的查询…我如何做到这一点?我是否必须为每个查询使用缓存.readQuery缓存.writeQuery内部更新函数?这对我来说太疯狂了


我对此感到迷茫。提前感谢。

这是Apollo客户端的一个不幸限制,但可以通过使用来解决。该链接允许您按操作名称关联突变和查询,这样对于具有特定操作名称的任何突变,都可以更新具有特定操作名称的所有查询。最大的问题是:这种方法的ide是,它将更新逻辑移到组件之外,并移到客户机配置中,这可能会使事情变得有点混乱

示例用法,给定名为
AddItem
的突变和名为
Items
的查询:

const cache = new InMemoryCache()
const link = new WatchedMutationLink(cache, {
  AddItem: {
    Items: ({ mutation, query }) => {
      const addedItem = mutation.result.data.addItem
      const items = query.result.items
      const items.push(addedItem)
      return {
         ...query.result,
        items,
      }
    }
  }
})

请注意,您可以检查传递给函数的查询和变异,以确定需要更改的内容(如果有)。根据查询的实际外观,您的实际代码可能会有所不同,这是一个示例。有关更多详细信息,请参阅文档。

谢谢Daniel。此软件包非常棒。但我不知道它是否有enough支持未来和下一个阿波罗版本。我将使用它,但我将等待可能的更改