为什么Relay + GraphQL连接中没有'position'参数?

时间:2016-05-03 02:40:44

标签: pagination graphql relayjs

GraphQL和Relay具有强大的分页算法,可以为最终用户提供简单的分页,即使在无界和与顺序无关的结果中也可以进行分页。

但是,我有一个用例,我不确定如何在GraphQL和中继中进行操作,而且我很确定我只是错过了一些东西。

例如,如果订购了我的列表(例如,通过orderBy参数),我如何获得第5项(并且只有第5项)?

2 个答案:

答案 0 :(得分:1)

如果后端有一个有序列表,并且想要将元素放在特定位置,只需将位置值指定为查询字段的参数即可。查询字段的代码如下所示:

employee: {
  type: EmployeeType,
  args: {
    position: {
      type: new GraphQLNonNull(GraphQLInt)
    },
    ...args,
  },
  resolve: async (context, {position, ...args}) => {
    // Get the ordered list of employees, probably from cache.
    // Pick the employee with the requested position in the list.
    // Return the employee.
  },
},

答案 1 :(得分:1)

这没有很好的记录,但这里有如何做到这一点。

query {
  allPeople(first: 5, last: 1) {
    edges {
      node {
        name
      }
    }
  }
}

首先,您选择first: 5以获取列表中的前5个人。然后,执行从{em>子集获取最后一个人的last:1。换句话说 - 得到第五个人。

如果你(first: 5, last: 2),你会得到名单中的第4和第5个人。

Demo (如果它返回错误 - 在查询中手动重新键入单词query并且它将起作用)。然后,在没有firstlast的情况下再次尝试查看整个列表,您会看到Leia是第5名。