【发布时间】:2020-04-06 06:40:41
【问题描述】:
我遇到了一个 GraphQL 错误,我似乎无法确定其来源。
所需类型“String!”的变量“$title”没有提供。
所需类型“String!”的变量“$body”没有提供。
所需类型“Int!”的变量“$price”没有提供。
错误信息很简单。此突变需要三个必需的变量,并且错误表明未提供任何类型,即使它们已明确提供。令人困惑的部分是使用 GraphQL Playground 的相同突变工作得非常好。在前端使用其他突变也可以正常工作。这告诉我这不是解析器的问题,也不是一般的服务器问题。
我用于突变的 GraphQL 如下所示:
export const CREATE_POST_MUTATION = gql`
mutation CreatePost($title: String!, $body: String!, $price: Int!) {
createPost(data: {
title: $title, body: $body, price: $price
}
){
id
title
}
}
`
我正在使用 Apollo 的 React Hook:
const [createPost, { data, loading }] = useMutation(CREATE_POST_MUTATION, {
onCompleted: data => {
setCompleted({
data,
})
setModal(true)
},
onError: data => {
setCompleted({
isOpen: true,
error: true,
})
},
})
表单的提交处理程序:
const submitHandler = async (value) => {
const { title, price, description } = value
try {
await createPost({
variables: {
data: {
title,
body: description,
price: Number(price),
}
}
})
} catch(err) {
throw new Error(err)
}
}
控制台日志记录title、price、description 显示状态,以便它们正确传递给createPost。即使我直接将值分配给createPost 的变量而不传递状态,也会显示相同的错误。这告诉我这些错误与表单无关。
我将 Formik 和 Yup 用于子组件中的表单,但即使我将所有内容都剥离到只剩下 TextInput 的所有内容,也会显示相同的错误消息:
服务器端的 GraphQL 架构:
type Mutation {
createPost(data: CreatePostInput!): Post!
}
input CreateUserInput {
title: String!
body: String!
price: Int!
}
当我在服务器端控制台记录相应的变异解析器时,请求和参数甚至都没有到达那里。
【问题讨论】:
标签: javascript reactjs react-native graphql react-apollo