Kev*_*vvv 2 javascript reactjs graphql react-native react-apollo
我收到 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
}
}
`
Run Code Online (Sandbox Code Playgroud)
我正在使用 Apollo 的 React Hook:
export const CREATE_POST_MUTATION = gql`
mutation CreatePost($title: String!, $body: String!, $price: Int!) {
createPost(data: {
title: $title, body: $body, price: $price
}
){
id
title
}
}
`
Run Code Online (Sandbox Code Playgroud)
表单的提交处理程序:
const [createPost, { data, loading }] = useMutation(CREATE_POST_MUTATION, {
onCompleted: data => {
setCompleted({
data,
})
setModal(true)
},
onError: data => {
setCompleted({
isOpen: true,
error: true,
})
},
})
Run Code Online (Sandbox Code Playgroud)
控制台日志记录title
显示状态,以便将它们正确传递price
到. 即使我直接将值分配给的变量而不传入状态,也会显示相同的错误。这告诉我这些错误与表单无关。description
createPost
createPost
我在子组件中使用 Formik 和 Yup 作为表单,但即使我将所有内容都剥离到只剩下TextInput
,也会显示相同的错误消息:
服务器端的 GraphQL 架构:
type Mutation {
createPost(data: CreatePostInput!): Post!
}
input CreateUserInput {
title: String!
body: String!
price: Int!
}
Run Code Online (Sandbox Code Playgroud)
当我在服务器端控制台记录相应的突变解析器时,请求和参数甚至没有到达那里。
尽管您在内部传递变量data
,但您的 graphql 并不期望它们在内部data
。所以改变
await createPost({
variables: {
data: {
title,
body: description,
price: Number(price),
}
}
})
Run Code Online (Sandbox Code Playgroud)
到
await createPost({
variables: {
title,
body: description,
price: Number(price),
}
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17689 次 |
最近记录: |