change log中为@relay(pattern: true) relay.js引入了新的表达式0.5

但是无法从描述中弄清楚,也无法测试它的确切功能以及在编写fatQueries时应何时使用它。

一些示例将非常有帮助。

最佳答案

考虑如下的GraphQL查询:

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

在为Relay突变定义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)指令指示要使用胖查询来模式将与跟踪的查询进行匹配,而不是将其用作完整的查询。

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

关于relayjs - @relay(pattern :true)的目的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34103296/

10-10 11:07