0

创建中继查询时是否可以选择包含参数?

见下文,我正在查询资源,并且在这里对参数进行硬编码。

我想有条件地包含其中一些参数,例如 date_gt 和 date_lt。目前我必须为这些设置初始值,但这分崩离析,因为我需要查询没有日期的记录。

如果我不能这样做,是否可以将null值作为值发送到此处的参数,因为目前我对此也没有太多运气。

    fragments: {
    viewer: () => Relay.QL`
        fragment on Viewer {
            resources( 
                    first: $pageSize
                    q: $q
                    type: $types
                    license: $licenses
                    order: $order
                    access_rights: "published"
                    orphan: true
                    date_gt: $dateFrom
                    date_lt: $dateTo
            )
            {
               total
               edges {
                    node {
                        ${ArticleResult.getFragment('resource')}
                    }
                }
                pageInfo {
                    hasNextPage
                }
            }
        }
    `
},
4

1 回答 1

1

是的,我们可以为nullRelay(客户端)中的可选参数提供值。

但是,我们也可以为这些可选参数提供默认值。例如,在 GraphQL 模式中,字段resources可以是:

resources: {
  type: ResourceConnection,

  args: {
    // other args go here
    date_gt: {
      type: GraphQLString,
      defaultValue: '1970-01-01'
    },
    date_lt: {
      type: GraphQLString,
      defaultValue: '2030-12-31'
    },
    ...connectionArgs
  },

  resolve: async (root, {...otherArgs, date_gt, date_lt, ...args}) => {

    // Check date_gt and/or date_lt values. If they equal the default
    // invalid values, ignore them while calculating output. Sometimes it
    // is possible that the default values are good enough to be equivalent
    // of user-provided values.

    return output;
  },
},

如果我们不为可选参数提供默认值,我们可以将可选参数的值设置为null. 在这种情况下,undefined服务器端会收到值:

resources: {
  type: ResourceConnection,

  args: {
    // other args go here
    date_gt: {
      type: GraphQLString,
    },
    date_lt: {
      type: GraphQLString,
    },
    ...connectionArgs
  },

  resolve: async (root, {...otherArgs, date_gt, date_lt, ...args}) => {
    console.log(`date_gt: ${date_gt}, date_lt: ${date_lt}`);

    // Check date_gt and/or date_lt values. If they are not provided,
    // date_gt and date_lt are `undefined`. Calculate output accordingly.

    return output;
  },
},
于 2016-04-28T02:38:45.923 回答