2015-12-05 5 views
10

@relay(pattern: true)relay.js0.5についてはchange logに導入されました。@relayの目的(パターン:true)

しかし、正確に何が実行されているのか、いつ書き込むときに使用するのかは、説明からもテストでも分かりません。fatQueries

いくつかの例が非常に役に立ちます。

答えて

7

次のようなGraphQLクエリを考えてみましょう:

viewer { 
    friends(first: 10) { 
    totalCount 
    edges { node { name } } 
    pageInfo { hasNextPage } 
    } 
} 

そのサブフィールドのいずれかを指定せず、フィールドの名前が含まれるように、リレー変異のためfat queryを定義することというリレーのいずれかのサブフィールドを伝えたときそのフィールドはその突然変異の結果として変化する可能性がある。

残念ながら、このようなfindfirstなどの接続の引数を省略すると、friendsフィールド上lastが接続引数依存フィールドedgespageInfoの検証エラーが発生します。

getFatQuery() { 
    return Relay.QL` 
    fragment on AddFriendMutationPayload { 
     viewer { 
     friends { edges, pageInfo } # Will throw the validation error below 
     } 
    } 
    `; 
} 

// Uncaught Error: GraphQL validation/transform error ``You supplied the `pageInfo` 
// field on a connection named `friends`, but you did not supply an argument necessary 
// to do so. Use either the `find`, `first`, or `last` argument.`` in file 
// `/path/to/MyMutation.js`. 

あなたが使用することができます@relay(pattern: true)ディレクティブを使用して、fatクエリをパターン一致に使用して、完全に統合されたクエリとして使用するのではなく、追跡されたクエリに対して使用したいことを示します。変異の詳細については

getFatQuery() { 
    return Relay.QL` 
    fragment on AddFriendMutationPayload @relay(pattern: true) { 
     viewer { 
     friends { edges, pageInfo } # Valid! 
     } 
    } 
    `; 
} 

参照:https://facebook.github.io/relay/docs/guides-mutations.html#content

+0

うーん...私は、これは自動的に起こったと思いました。上記のdocリンクから引用すると、 'この太ったクエリは、他のGraphQLクエリのように見えますが、重要な違いの1つです。私たちは、これらのフィールドのいくつかがスカラーではないことを知っていますが(FriendEdgeや友人のように)、サブクエリを使って子どもの名前を付けていないことに気づきます。このようにして、私たちはRelayに、このような非スカラーフィールドの下のものがこの突然変異の結果として変化する可能性があることを示す。 –

+1

Hunh。私はそれらの文書も書いています。私はこの1つに電話して友達にしなければならないだろう。 @ JoeSavona、何のためのパターンディレクティブですか? – steveluscher

+0

友人に電話しました。私の答えを編集する! – steveluscher

関連する問題