给出以下GraphQL类型定义:
const typeDefs = `
enum Action {
update
delete
}
type Mutation {
doSomething(action: Action)
}
`;
此查询有效:
const query = `
mutation($action: Action) {
doSomething(action: $action)
}
`
const variables = { action: "update" }
但是这个没有:
const query = `
mutation {
doSomething(action: "update")
}
`
GraphQL不支持直接将枚举值作为参数传递吗?
答案 0 :(得分:4)
GraphQL支持直接将枚举作为参数传递;但是,您需要省略值周围的引号才能使其工作:
const query = `
mutation {
doSomething(action: update)
}
`
根据spec:
枚举值表示为不带引号的名称(例如MOBILE_WEB)。
因此,与字符串值不同,枚举值不应放在引号内。我们在将它们用于变量时这样做的唯一原因是遵循正确的JSON格式。
答案 1 :(得分:0)
枚举是:
enum Gender {
MALE
FEMALE
}
我正在使用Vue作为前端,因此可以像这样将数据传递给Vue的变异。 我在组件的本地状态下将性别定义为字符串:
data(){
return {
gender: ''
}
}
Vue中的方法是:
async handleEditProfile () {
const response = await this.$apollo.mutate({
query: EDIT_PROFILE,
variables: {
nameAsInPan: this.nameAsInPan,
gender: this.gender,
dateOfBirth: this.dateOfBirth
}
})
}
在EDIT_PROFILE上面使用的变异:
gql`mutation editProfile($name: String!, $email: String!,$phone: String!, $gender: Gender!, $dateOfBirth: String!) {
editProfile (profileInput:{name: $name, email: $email, phone: $phone, gender: $gender, dateOfBirth: $dateOfBirth}){
id
email
phone
firstName
lastName
nameAsInPan
gender
dateOfBirth
}
}
`
使用突变中定义的枚举变量名称,并将其发送给Graphql,就像我使用了性别As
$gender: Gender!
处于gql突变。您不必担心将数据作为枚举发送,只需将其作为String发送,否则您将不得不面对JSON错误,Graphql将处理您以字符串形式发送的值(例如“ MALE”或“ FEMALE”)别忘了提到性别是gql突变中的性别类型(即枚举),就像我上面所做的那样。