Apollo Link数据突变

时间:2018-08-17 21:02:22

标签: graphql apollo relaymodern vue-apollo apollo-link

我正在尝试更改整个应用程序的apollo-link处理程序中的数据:我想删除所有边缘/节点,以简化应用程序中数据的处理。

const consoleLink = new ApolloLink((operation, forward) => {
  return forward(operation).map((data) => {
    let data = getRidOfEdges(inData)
    return data
  })
})

当我尝试更改数据并返回数据的修改后的副本时,我的vue组件中的阿波罗处理程序将获得一个空的数据对象={}。我还尝试就地更改数据,但这也不起作用:vue组件获取原始的未更改的data

apollo: {
  moduleQuery: {
    query: MODULE_DETAILS_QUERY,
    variables: {
      slug: 'video'
    },
    fetchPolicy: 'network-only',
    manual: true,
    result({data, loading, networkStatus}) {
        // after mutating data, I get
        // data == {}
    }

对此行为有何解释?以及如何实现Apollo链接以能够对数据进行突变?这有可能吗?

1 个答案:

答案 0 :(得分:1)

如果该客户端是GraphQL客户端,并期望根据GraphQL定义存在该数据,则它将转储任何不适合该模型的数据。如果控制服务器,只需将节点数组添加到连接的根目录中。它不必只是pageInfo并在其边缘。如果不这样做,则可以将其中的一种缝合在一起,并通过扩展这些类型来做同样的事情,然后可以对数据进行处理。

除非生产者和使用者都遵循标准,否则实际上并没有一种简单的方法来进行生产者和使用者之间的数据操作,除非您执行缝合和转换(这会更改架构)。在这种情况下,您可以拥有一个单独的端点,该端点具有自己的模式定义,该定义将后端转换为所需的结构。