【问题标题】:Graphql + axios - filtering and sortingGraphql + axios - 过滤和排序
【发布时间】:2020-07-14 17:32:35
【问题描述】:

如何过滤和排序数据?关于排序,我应该使用 gatsby.js 吗?还有其他方法吗?

const RootQuery = new GraphQLObjectType({
  name: "Query",
  description: "Root Query",
  fields: () => ({
    member: {
      type: MemberType,
      description: "A Single Person",
      args: {
        nick: { type: GraphQLString }
      },
      resolve(parent, args) {
        return axios
          .get("http://25.98.140.121:5000/data")
          .then(members.find(member => member.nick === args.nick))
      }
    },
    members: {
      type: new GraphQLList(MemberType),
      description: "List of All Members",
      resolve(parent, args) {
        return axios
          .get("http://25.98.140.121:5000/data")
          .then(res => res.data)
      }
    },
    school: {
      type: SchoolType,
      description: "A Single School",
      args: {
        name: { type: GraphQLString }
      },
      resolve: (parent, args) => schools.find(school => school.name === args.name)
    },
    schools: {
      type: new GraphQLList(SchoolType),
      description: "List of All Schools",
      resolve(parent, args) {
        return axios
          .get("http://25.98.140.121:5000/data")
          .then(res => res.data)
    }
  })
});

当然上面的过滤(学校,会员)不起作用,因为我不知道如何连接'find'和'return axios'。
这样我没有得到过滤的数据,当我使用成员(昵称:John)或学校(名称:XYZ)。
希望你明白我的意思。我应该改变什么?或者,也许您有其他解决方案?

【问题讨论】:

  • 请具体说明哪些代码“不起作用”。那里有四种不同的功能。你对哪一个有问题?
  • 对不起,我已经编辑了我的帖子。

标签: graphql axios


【解决方案1】:

离你不远了。 axios.get 返回一个 Promise,您在解析器中正确返回了它。您还正确地使用了then 来修改该 Promise 的已解析值。这里唯一的问题是传递给then 的参数应该是一个函数。所以你想做这样的事情:

return axios
  .get("http://25.98.140.121:5000/data")
  .then(res => res.data.find(member => member.nick === args.nick))

您传递给then 的任何函数都将使用您正在调用then 的Promise 的解析值调用。因此,如果axios.get 返回一个将解析为对象成员数组的 Promise,则该值将传递给您的函数。请注意,我们在上面定义了内联函数,但也可以单独定义:

const getMemberByNick = (res) => res.data.find(member => member.nick === args.nick)

return axios
  .get("http://25.98.140.121:5000/data")
  .then(getMemberByNick)

甚至

const getMemberByNick = (data) => data.find(member => member.nick === args.nick)

return axios
  .get("http://25.98.140.121:5000/data")
  .then(res => getMemberByNick(res.data))

【讨论】:

  • 现在我得到“members.find 不是函数”。谢谢!
  • 糟糕。 axios 返回一个response object,所以我们需要访问它的data 属性
猜你喜欢
  • 2020-10-08
  • 2021-01-10
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 2019-12-30
  • 2023-04-04
相关资源
最近更新 更多