@relay的目的(pattern:true)

时间:2015-12-05 09:27:58

标签: relayjs

@relay(pattern: true) relay.jschange log引入了新的表达式0.5

但是无法从描述中找出来,也不能测试它究竟是什么以及何时在编写fatQueries时使用它。

一些例子会非常有用。

1 个答案:

答案 0 :(得分:7)

考虑如下的GraphQL查询:

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

为继电器突变定义fat query时,要包含字段名称而不指定其任何子字段,告诉Relay 该字段的任何子字段可能因更改而改变那突变。

不幸的是,在find字段上省略firstlastfriends等连接参数会导致依赖于连接参数的字段出现验证错误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)指令指示要对跟踪的查询使用胖查询模式匹配,而不是将其用作完全成熟的查询。< / p>

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