Relay Fragment可选参数

时间:2016-04-27 23:45:02

标签: relay

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

见下文我正在查询资源,我很难在这里编写params。

我想有条件地包含其中一些参数,例如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
                }
            }
        }
    `
},

1 个答案:

答案 0 :(得分:1)

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

但是,我们也可以为这些可选参数提供默认值。例如,在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;
  },
},