【发布时间】:2019-07-05 06:57:39
【问题描述】:
我正在使用graphql-tag,所以我将使用该语法。
假设我有这个查询:
const query = gql`
query user(id: String) {
user(id: $id) {
id
}
}
`
如果在不同的调用中,除了id 之外,我还想要字段username 和email,而无需再次重写整个查询,那么重用同一个查询文档节点的最佳模式是什么:
const query = gql`
query user(id: String) {
user(id: $id) {
id
username
email
}
}
`
我在前端使用react-apollo,如果这让事情变得更有趣的话。
编辑:
只是为了澄清......这样的事情
const userIdFrag = gql`
fragment UserId on User {
id
}
`
const fullUserFrag = gql`
fragment FullUser on User {
id
username
email
}
`
const generateQuery = (documentNode) => {
return gql`
query user(id: String) {
user(id: $id) {
...documentNode
}
}
${documentNode}
`
}
const idQuery = generateQuery(userIdFrag);
const fullUserQuery = generateQuery(fullUserFrag);
(上述方法确实有效,但控制台中的 graphql 出现错误,这让我相信这不是我应该做的事情)
【问题讨论】:
-
您可以查看片段 - apollographql.com/docs/react/advanced/fragments.html,尽管您仍然需要定义查询 2 次span>
-
是的,我知道片段,我想知道是否有更好的方法可以避免每次都写查询签名
-
您遇到的错误是什么?
-
@ric0 错误基本上说“在 graphql 查询中未使用 documentNode”,即使 ${documentNode} 片段正在添加到其中
标签: graphql react-apollo apollo-client