【问题标题】:passing arguments in graphQL queries在 graphQL 查询中传递参数
【发布时间】:2019-09-18 14:53:58
【问题描述】:

我刚开始学习 GraphQL,目前正在尝试创建一个 twitter 的克隆。在下面的代码中,有没有一种方法可以将 id 参数(例如 user(id: 81))中的 81 自动传递给 userId 参数(例如 tweets(userId: 81))?

我在下面复制了我的代码

{
  user(id: 81) {
    username
    email
    tweets(userId: 81) {
      content
    }
  }
}

user_type.rb

module Types
  class UserType < Types::BaseObject
    field :username, String, null: false
    field :email, String, null: false
    field :bio, String, null: true
    field :tweets, [Types::TweetType], null: true do
      argument :user_id, ID, required: true
    end

    def tweets(user_id:)
      Tweet.where(user_id: user_id)
    end
  end
end

tweet_type.rb

module Types
  class TweetType < Types::BaseObject
    field :id, ID, null: false
    field :content, String, null: false
    field :userId, ID, null: false
    field :createdAt, GraphQL::Types::ISO8601DateTime, null: false
    field :user, Types::UserType, null: false
  end
end

query_type.rb

module Types
  class QueryType < Types::BaseObject
    field :tweets,
      [Types::TweetType],
      null: false,
      description: "Returns a list of all tweets"

    field :user,
      Types::UserType,
      null: false,
      description: "Returns a list of all users" do
        argument :id, ID, required: true
      end

    def tweets
      Tweet.all
    end

    def user(id:)
      User.find(id)
    end
  end
end

【问题讨论】:

    标签: graphql graphql-ruby


    【解决方案1】:

    GraphQL 有一种一流的方式将动态值从查询中分解出来,并将它们作为单独的字典(变量)传递。您将使用类似于下面的语法,并且可以阅读更多关于它的信息here

      query User($id: Int) {
        user(id: $id) {
            username
            email
            tweets(userId: $id) {
              content
            }
         }
       }
    

    【讨论】:

    • 是的。要调用该查询,您需要将要使用的变量传递给它。比如:useQuery(QUERY,{ variables: { id: 81 }})
    猜你喜欢
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2017-09-27
    • 2023-01-26
    • 2019-06-22
    • 2018-03-08
    • 2017-05-28
    • 2019-04-13
    相关资源
    最近更新 更多