2016-04-27 5 views
0

Ist es möglich, Parameter beim Erstellen einer Relay-Abfrage optional aufzunehmen?Relay Fragment Optional Argumente

Siehe unten Ich Frage Ressourcen, und ich bin hart Codierung der Parameter hier.

Ich möchte einige dieser Argumente, zum Beispiel date_gt und date_lt, bedingt einbeziehen. Im Moment muss ich Anfangswerte für diese setzen, aber das fällt auseinander, da ich nach Datensätzen ohne Daten suchen muss.

Wenn ich das nicht kann ist es möglich, null als Wert an einen Param zu senden, da ich im Moment nicht viel Glück damit habe.

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 
       } 
      } 
     } 
    ` 
}, 

Antwort

1

Ja, wir können null als Wert für ein optionales Argument in Relay (Client-Seite) zur Verfügung stellen.

Wir können jedoch auch Standardwerte für diese optionalen Argumente angeben. Zum Beispiel in dem GraphQL Schema kann das Feld resources wie:

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; 
    }, 
}, 

Wenn wir nicht einen Standardwert für ein optionales Argument liefern wir Wert des optionalen Arguments null einstellen. In diesem Fall wird undefined Wert auf der Serverseite erhalten:

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; 
    }, 
}, 
+0

Danke, ja so nur eine param zu null Einstellung scheint Relay verursachen nicht, dass param bis zum GraphQL Server zu übergeben, das ist genau das, was ich wollte . – Tim