说我有MemberType
这样的
import {
GraphQLID,
GraphQLList,
GraphQLNonNull,
GraphQLObjectType,
GraphQLString
} from 'graphql'
import readPhoneNumbersByMemberId from '../resolvers/readPhoneNumbersByMemberId'
import PhoneNumberType from './PhoneNumberType'
const MemberType = new GraphQLObjectType({
name: 'Member',
fields: {
id: {
type: new GraphQLNonNull(GraphQLID)
},
firstName: {
type: new GraphQLNonNull(GraphQLString)
},
lastName: {
type: new GraphQLNonNull(GraphQLString)
},
phoneNumbers: {
type: new GraphQLList(PhoneNumberType),
resolve: readPhoneNumbersByMemberId
}
}
})
export default MemberType
和PhoneNumberType
这样的
import {
GraphQLNonNull,
GraphQLObjectType,
GraphQLString
} from 'graphql'
const PhoneNumberType = new GraphQLObjectType({
name: 'PhoneNumber',
fields: {
value: {
type: new GraphQLNonNull(GraphQLString)
}
}
})
export default PhoneNumberType
和QueryType
这样的
const QueryType = new GraphQLObjectType({
name: 'Query',
fields: {
readMembers: {
type: new GraphQLList(MemberType),
resolve: readMembers
}
}
})
现在,如果我查询GraphQL架构以检索成员,则将调用解析函数readMembers
和readPhoneNumbersByMemberId
来从源中获取数据。
是否可以对突变使用相同的机制?
答案 0 :(得分:1)
你可以你不应该。字段解析器实际上是为了获取数据。将创建/更新/删除逻辑放在嵌套解析器中很快就会出现问题,并引入您想用graphql解决的相同问题。
对于任何复合对象创建了一个名为<-done
的完整特殊类型,它被作为突变(或查询)的参数发送,这是非常沮丧的。
如果你可以解释拆分变异逻辑的好处,那么GraphQL规范可能是一个很好的RFC接受每个字段的mutate函数,这样你就可以保持变异逻辑分离,同时实现相同的嵌套特性。
如果您仍想尝试这样做,您只需从根解析器返回返回对象上的input
字段,并且只有在看到该字段时才能在嵌套解析器上进行所需的更改。确保返回嵌套解析器上更改的数据。