【问题标题】:Getting Error Variable "$name" of required type "String!" was not provided. on firing Graphql request from React-Apollo获取所需类型“String!”的错误变量“$name”没有提供。从 React-Apollo 触发 Graphql 请求
【发布时间】:2020-11-04 04:09:46
【问题描述】:

这是组件渲染的第一个错误:

POST http://localhost:4000/graphql 500(内部服务器错误)

[GraphQL 错误]:消息:所需类型“字符串!”的变量“$name”没有提供。

触发查询的第二个错误(提交表单):

this.props.movieByName is not a function...

这是代码

import React, { Component } from 'react';
import {HashLink as Link} from 'react-router-hash-link' 
import { graphql } from 'react-apollo';
import {flowRight as compose} from 'lodash'
import { gql } from "apollo-boost";


const movieByName = gql`
  query SomeName($name: String!){
    movieByName(name: $name){
      name
      genre
      year
    }
  }
`

class Header extends Component {
  state = {
  name: '',
  genre: '',
  year: ''
}

searchSubmit = (event) => {
  event.preventDefault()
  this.props.movieByName({
   variables: {
     name: event.target.value
   }
 })
 console.log(this.props)}

 render(){
  return (
  <div className="topnav">
    <a className="logo" href="/">Movie Maker</a>
    <div className="search-container">
      <form onSubmit={this.searchSubmit}>
        <Link smooth to="#form">Add Movies</Link>
        <input type="text" placeholder="Search.." name="search" 
          onChange={(e) => this.setState({name: e.target.value})}/>
        <button type="submit"><i className="fa fa-search"></i></button>
      </form>
    </div>
  </div>
);}}

export default graphql(movieByName)(Header)

【问题讨论】:

  • 嗨 mohdraqif,欢迎来到 StackOverflow! ??????

标签: javascript graphql react-apollo apollo-client graphiql


【解决方案1】:

这个错误是什么意思?

  • 您的 graphql 架构需要一个名为 $name 的变量。
  • 该变量必须是 String 类型,并且不能为 undefined 或 null(它是 required

调试信息

  • 当您的searchSubmit 执行时,event.target.value 的值是多少?我怀疑它实际上是未定义的

解决方案

  • 使用状态中定义的名称值调用您的查询。因为您更新了输入 onChange 处理程序中的状态,所以最新的值将存储在那里

    this.props.movieByName({
      variables: {
        name: this.state.name
      }
    })
    

【讨论】:

  • 先生,您是对的。它是未定义的。但是错误:未找到变量仍然存在并显示在组件渲染中。同样在触发查询时,即使使用变量对象,它也显示 movieByname 不是函数。那里也有一点帮助。
  • 我怀疑这部分中graphql和组件的连接方式可能有问题export default graphql(movieByName)(Header)
  • 我很惊讶这个组件正在尝试执行查询,但它不是呈现结果的组件。您能否用您正在使用的每个组件中尝试执行的操作来更新您的问题?如果您可以发布一个 codesandbox.io/dashboard 来说明如何重现您的错误,那将非常有帮助?
猜你喜欢
  • 2021-07-18
  • 2019-05-29
  • 2021-03-25
  • 1970-01-01
  • 2020-08-24
  • 2022-01-03
  • 2020-10-18
  • 2019-06-29
  • 2020-04-23
相关资源
最近更新 更多