若已定义一个嵌套片段,则不必在父级片段中再次导入该嵌套片段,否则 Apollo codegen 在生成代码时会重复导入嵌套片段,导致编译错误。例如,假设有以下查询:
query MyQuery {
user(id: "someId") {
...UserDetails
}
}
fragment UserDetails on User {
id
name
address {
...AddressDetails
}
}
应该将 AddressDetails
嵌套片段定义在另一个文件中,并将其导入到 UserDetails
嵌套片段中,如下所示:
# AddressDetails.graphql
fragment AddressDetails on Address {
street
city
state
zip
}
# UserDetails.graphql
#import "./AddressDetails.graphql"
fragment UserDetails on User {
id
name
address {
...AddressDetails
}
}
通过这种方式,Apollo codegen 只会在生成代码中包含一次 AddressDetails
片段,而不会重复导入。