javascript - 动态构建中继查询

标签 javascript reactjs graphql relayjs

我使用 Relay Modern 作为我的客户端 GraphQL 接口(interface)。我想知道是否可以在 Relay Modern 中动态构建我的查询语句,例如更改原始语句:

const ComponentQuery = graphql`
    query ComponentQuery ($companyId: ID!) {
        viewer {
            company(id: $companyId) {
                id
                name
                enabled
                users {
                    id
                    username
                    email
                    firstName
                    lastName
                    jobTitle
                    phone
                }
            }
        }
    }
`;

至以下内容:

let queryFields = ['name', 'enabled'];
let userFields = ['username', 'email', 'firstName', 'lastName', 'jobTitle', 'phone' ];


const ComponentQuery = graphql`
    query ComponentQuery ($companyId: ID!) {
        viewer {
            company(id: $companyId) {
                id
                queryFields
                name
                enabled
                users {
                    id
                    userFields
                }
            }
        }
    }
`;

当然,由于 GraphQL 架构是静态的,因此字段必须全部存在于 GraphQL 架构中。我想要的只是动态构建查询,而不是动态 GraphQL 架构。

最佳答案

虽然不可能像您在第二个示例中概述的那样以无限制的方式动态制作查询,但您可以使用 @include@skip 指令做出固定数量的选择。

在片段级别:

query ComponentQuery(
  $companyId: ID!,
  $showUserDetails: Boolean!,
) {
  viewer {
    company(id: $companyId) {
      id
      name
      enabled
      users {
        id
        firstName
        lastName
        ... on User @include(if: $showUserDetails) {
          email
          jobTitle
          phone
          username
        }
      }
    }
  }
}

在现场级别:

query ComponentQuery(
  $companyId: ID!,
  $showUserContactDetails: Boolean!,
  $showUserRealName: Boolean!,
  $showUserRole: Boolean!,
  $showUserUnixname: Boolean!,
) {
  viewer {
    company(id: $companyId) {
      id
      name
      enabled
      users {
        id
        firstName @include(if: $showUserRealName)
        lastName @include(if: $showUserRealName)
        username @include(if: $showUserUnixname)
        email @include(if: $showUserContactDetails)
        jobTitle @include(if: $showUserRole)
        phone @include(if: $showUserContactDetails)
      }
    }
  }
}

关于javascript - 动态构建中继查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47142986/

相关文章:

reactjs - 如何在 react 中返回用户输入?

javascript - 当重定向到相同的路径名但使用不同的路由参数时,History.push 不起作用

graphql - 如何在 GraphQL 中返回一个对象或 null?

graphql - 使用GraphQL和Prisma级联删除相关节点

javascript - 将格式化文本 block 转换为 PHP 数组

javascript - 保存的网页显示 Javascript 错误

javascript - 如何使用 JavaScript 获取浏览器 URL 历史记录?

javascript - 为什么此 HTTP 请求返回数组长度而不是内容?

reactjs - 类型错误 : Cannot read property 'presetToOptions' of undefined in webpack-cli with ReactJs

reactjs - Gatsby 和 graphql : filtering for a specific single image