reactjs - 模板文字 - 从 API 获取错误

标签 reactjs graphql

所以我有一个按名称搜索动漫的方法,API是graphQL。 这是查询的重要部分

const searchQuery = this.state.searchString;

var query = `query Search{
  # the rest of the query omitted for brevity
    media(type:ANIME, search: ${searchQuery} ){
  # ... 
}
`

我在响应中收到两种类型的错误,第一种是当搜索字符串由空格分隔的多个单词组成时 - “语法错误:预期 :, 找到)”

第二次,当我搜索单个单词时 - “字段“媒体”参数“搜索”需要类型字符串,找到火影忍者。”

这里有什么问题吗?

您可以在此处查看完整代码 - https://github.com/red4211/react-anime-search ,应用程序部署到 github 页面,搜索 API 响应转到控制台 - https://red4211.github.io/react-anime-search/

最佳答案

问题是,给定一些像“naruto”这样的查询,您当前的代码会产生以下文本:

media(type:ANIME, search: naruto ) {

这不是有效的语法,因为字符串文字应该用双引号 (") 引起来。

不要使用字符串插值来为查询提供动态值。这些应始终表示为 variables并作为单独的对象与查询一起包含在您的请求中。

您需要将变量定义为操作的一部分,并提供适当的类型

var query = `query Search ($searchQuery: String!) {

然后您可以在操作中的任何位置使用该变量:

media(type:ANIME, search: $searchQuery) {

现在只需将变量值与您的请求一起传递即可。

body: JSON.stringify({
  query,
  variables: {
    searchQuery,
  }
})

请注意,在 GraphQL 文档内,变量名称以 $ 为前缀,但在文档之外,我们不会这样做。

关于reactjs - 模板文字 - 从 API 获取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57924792/

相关文章:

javascript - 为什么对象出现未定义?

javascript - 如何从 React 组件中的 React 函数获取值

ios - 订阅失败错误 WSError(类型 : Starscream. ErrorType.upgradeError 消息 : \"Invalid HTTP upgrade\", 代码 : 400)?

graphql - 新 GraphQL buildSchema 的嵌套查询

reactjs - 如何将自定义主题与 react-dates 一起使用?

javascript - React/Electron 渲染组件失败

reactjs - 使用 Typescript 显示从 Usestate 钩子(Hook)接收到的数组

graphql - apollo-codegen 输出为空

reactjs - `updater` 无法与 Relay Modern 配合使用,因为 `ConnectionHandler.getConnection()` 返回 `undefined`

reactjs - Gatsby GraphQL 错误 : Variable "$slug" is never used in operation "BlogPostQuery"