【问题标题】:Apollo Link data mutationApollo Link 数据突变
【发布时间】:2019-01-24 22:27:16
【问题描述】:

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

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

当我尝试更改数据并返回数据的修改副本时,我的 vue 组件中的 apollo 处理程序得到一个空数据对象={}。我也尝试就地改变数据,但这也不起作用: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 链接以能够改变数据?这可能吗?

【问题讨论】:

  • 如果客户端是 GraphQL 客户端并且期望数据根据 GraphQL 定义存在,它将转储任何不适合该模型的数据。如果您控制服务器,只需将node 的数组添加到连接的根目录中。它不必只有pageInfoedges。如果你不这样做,你可以拼接一个并通过扩展这些类型来做同样的事情,然后你可以按摩数据。
  • 你是对的@DanCrews。有没有办法在不改变架构的情况下启用数据操作?你为什么不把你的答案写成常规答案,这样我就可以投票了?

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


【解决方案1】:

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

如果生产者和消费者都遵循标准,那么实际上没有一种简单的方法可以在生产者和消费者之间进行数据操作,除非您进行拼接和转换,这会改变架构。在这种情况下,您可以拥有一个单独的端点,其中包含您自己的架构定义,将后端转换为您正在寻找的结构。

【讨论】:

    猜你喜欢
    • 2019-12-25
    • 2021-01-29
    • 2019-10-24
    • 2019-04-20
    • 2017-02-07
    • 2020-01-09
    • 2017-09-30
    • 2021-03-13
    • 2020-04-24
    相关资源
    最近更新 更多