2015-12-05 17 views
10

@relay(pattern: true)的新表達對於relay.js0.5被引入。@relay的用途(圖案:真)

但是不能從描述中弄清楚,也不能測試它到底是什麼,以及在編寫fatQueries時應該使用它。

一些例子會非常有幫助。

回答

7

考慮一個GraphQL查詢類似如下:

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

當中繼突變定義fat query,包括一個字段的名稱不指定任何及其子字段的告訴繼電器是的任意子該字段可能因該突變而改變。

不幸的是,省略連接參數,如findfirstlastfriends場會造成連接參數的相關領域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)指令指示想要針對跟蹤的查詢使用胖查詢到模式匹配,而不是將其用作完全查詢。

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

嗯...我想這是自動發生。從上面的文檔鏈接引用:'這個胖查詢看起來像任何其他GraphQL查詢,有一個重要的區別。我們知道這些領域中的一些是非標量的(比如friendEdge和friends),但注意我們還沒有通過子查詢來命名他們的任何子女。通過這種方式,我們向Relay表明,這些非標量場下的任何東西都可能由於這種變異而改變。' –

+1

Hunh。我也寫了那些文檔。我將不得不打電話給這位朋友。 @JoeSavona,這是什麼模式指令? – steveluscher

+0

打了個電話給朋友。編輯我的答案! – steveluscher