Apollo客户端中的抽象中继样式连接

时间:2019-08-19 20:08:12

标签: graphql apollo apollo-client relay

我正在构建一个将在后端使用GraphQL并在前端使用Apollo客户端的应用程序。我将使用Relay-style connection types,因为它将允许我们将元数据放在关系上。

但是,我们不希望我们的react组件必须处理连接增加的额外复杂性。出于传统原因,并且因为它看起来更干净,我希望我的react组件不必处理nodesedges。我更喜欢绕行:

代码段1

const ticket = {
  title: 'My bug'
  authors: [{ login: 'user1', login: 'user2' }]
}

而不是

代码段2

const ticket = {
  title: 'My bug'
  authors: {
    nodes: [{
      login: 'user1',
      login: 'user2',
    }]
  }
}

在打字稿中,我真的没有看到自己定义一种票证类型,该票证类型将包含节点和元数据,例如nextPagelastPage等...

我正在尝试提出一个抽象,也许是在apollo客户端级别上,它允许我自动将Snippet 2转换为Snippet 1,同时在我确实需要这些元数据时仍允许访问Snippet 1。

这个问题被别人解决了吗?您对可能的解决方案有什么建议吗?我是朝错误的方向前进吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试在架构中公开其他字段,而不是尝试解决此客户端问题。您可以使用official SWAPI example来完成此操作:

query {
  allFilms {

    # edges
    edges {
      node {
        ...FilmFields
      }
    }

    # nodes exposed directly
    films {
      ...FilmFields
    }
  }
}

这样,您可以根据需要查询具有或不具有连接的节点,而不必在客户端进行复杂的操作。