我有点卡住了。我正在使用带有react-query的graphql-request ,非常严格地遵循示例代码。我用自己的后端替换了它,当我不使用变量但对值进行硬编码时它可以工作。它也适用于我的 GraphiQL 测试环境。
所以这样做有效:
export default function usePost(postId) {
return useQuery(
["post", postId],
async () => {
const { post } = await request(
endpoint,
gql`
query {
post(id: "123123123123") { // <--- with the id hard-coded, it works
id
heading
content
}
}
`
)
return post
},
{
enabled: !!postId,
}
)
}
下面是完全相同的代码,但现在之前硬编码的 post-id ("123123123123") 被一个变量( ${postId}
) 替换。完全如示例代码中所述
export default function usePost(postId) {
return useQuery(
["post", postId],
async () => {
const { post } = await request(
endpoint,
gql`
query {
post(id: ${postId}) { // <--- with the ${postId} variable, things break, but it's exactly the same syntax as in the react-query example & it works in my graphiql backend. Also console-logged the postId, and it is correct
id
heading
content
}
}
`
)
return post
},
{
enabled: !!postId,
}
)
}
错误响应是:
commons.js:46154 错误:语法错误:预期:,找到): {"response":{"errors":[{"message":"语法错误:预期:, 找到)","locations":[{" line":3,"column":46}]}],"status":400},"request":{"query":"\n query {\n post(id: 5fda109506038d9d18fa27e2) {\n
id\n GraphQLClient 的标题\n 内容\n }\n
}\n "}}。(commons.js:13039) 在步骤 (commons.js:12930) 在 Object.next (commons.js:12911) 在完成 (commons.js:12902)
我想这是我弄错了一些语法?还是与现在缺少引号的事实有关?虽然示例代码也没有做任何不同的事情......真的不确定了,但实际上是一行打破了这一切,我无法弄清楚。