react-apollo mutation组件将空字符串发送为null

时间:2018-05-10 20:16:00

标签: reactjs null graphql react-apollo graphql-mutation

我将把问题简化为一个简单的例子。我有一个表组件呈现一个包含查询数据的表。我还有一个小表单,允许用户将数据输入表中。我遇到的问题是输入字段的默认值是空字符串。

示例输入字段:

<td><input  type="text" placeholder="Nombre" name="name" onChange={this.handleChange} value={this.state.name}/></td>

假设状态持有空字符串作为输入字段的默认值

this.state={name:' '}

还假设我想在表单中向数据库发送一个空字符串。我正在使用graphql:

进行apollo方式的变异
const ADD_CONTACTS = gql`
mutation createContact(
$name: String,
    ){
  createContact(
    name: $name
  ){
    id
    name
  }
}`

<Mutation mutation={ADD_CONTACTS}>
        {createContact=>(
            <form onSubmit={async e=> {
                e.preventDefault();
                let name = this.state.name;
                await createContact({variables : { 
                    "name":name
                } })


                }}
            >
            <table>
             ... table markup with input fields
            </form>
        )}
        </Mutation>

好的,这是一般背景。实际上,表单包含6个字段。但问题是,当我向变量中的查询发送一个空字符串时,它将查询发送到服务器的那一刻它将空字符串更改为null值,以便我最终得到此错误:< / p>

GraphQL错误:SQLSTATE [23000]:完整性约束违规:1048列&#39;名称&#39;不能为空

我已经使用graphiql测试了服务器,并且请求本身可以接受空字符串,但似乎是某个地方的变异组件或apollo正在将我传递给graphql变量的空字符串转换为null。

我已经设法为这种情况制定了解决方法,但它绝对不是解决这个问题的正确方法。如果我能以某种方式获得apollo实际发送空字符串而不是null,它将解决问题。

感谢任何有任何想法为什么我

的人

1 个答案:

答案 0 :(得分:0)

尝试删除asyncawait