【问题标题】:finishing up the onSubmit to create GraphQL mutation完成 onSubmit 以创建 GraphQL 突变
【发布时间】:2018-08-23 07:02:21
【问题描述】:

我只是在尝试完成突变以使其能够添加评论。当我使用 GraphQL 查询时,graphql 组件可以工作,但我无法让它在前端与 React 一起工作。想知道我错过了什么。我知道我必须在表单区域的 onSubmit 方法上做更多的事情,但我不断收到错误。

我创建了一个 submitCreateReview 函数,但我只是在 graphql 方面得到了错误

[GraphQL error]: Message: Variable "$author" of required type "String!" was not provided., Location: [object Object], Path: undefined

index.js:63 [GraphQL error]: Message: Variable "$rating" of required type "Int!" was not provided., Location: [object Object], Path: undefined
index.js:63 [GraphQL error]: Message: Variable "$comment" of required type "String!" was not provided., Location: [object Object], Path: undefined
index.js:68 [Network error]: Error: Response not successful: Received status code 400

我正在使用这个tutorial 寻求帮助,但并没有真正到达任何地方:

class CreateReview extends Component {

    constructor(props){
    super(props)

    this.state = {
        author: '',
        rating: '',
        comment: ''
    };
}

submitCreateReview(e){
    e.preventDefault();
    this.props.onCreateReview({
        variables: {
            author: this.state.author,
            rating: this.state.rating,
            comment: this.state.comment
        }
    });
}
render() {
    return <div className="create-review">
        <h3>Write a Review</h3>
        <form onSubmit={this.submitCreateReview.bind(this)}
            }}>
            <label>Rate Your Experience</label>
            <div className="create-review__stars">
                <input id="_create_review_ratings"
                    value={this.props.rating}
                    onChange={(e) => this.setState({ rating: e.target.value})} /><StarIcon />
            </div>
            <label htmlFor="create-review__author">Author</label>
            <input
                id="create-review__author"
                value={this.props.author}
                onChange={(e) => this.setState({author: e.target.value})}
                 />
            <label htmlFor="create-review__comment">Review</label>
            <textarea
                id="create-review__comment"
                value={this.props.comment}
                onChange={(e) => this.setState({comment: e.target.value})}
                />
            <button>Add Review</button>
        </form>
    </div>;
 }
}

const createReviewMutation = gql`
mutation createReview(
    $author: String!,
    $rating: Int!,
    $comment: String!,
) {
    createReview(
        author: $author
        rating: $rating
        comment: $comment
    ) {
        id
        rating
        author
        comment
        created_at
    }
}
`;


 export default function CreateReviewHOC(props) {
  return <Mutation
    mutation={createReviewMutation}
    update={(cache, { data: { createReview } }) => {
        const { reviews } = cache.readQuery({ query: props.getReviewsQuery });
        cache.writeQuery({
            query: props.getReviewsQuery,
            data: { reviews: [createReview].concat(reviews) }
        });
    }}
>
    {(submitCreateReview, { data }) => (
        <CreateReview
            {...props}
            onCreateReview={variables => submitCreateReview({ variables })}
        />
    )}
</Mutation>;
}

【问题讨论】:

  • 您能否提供有关错误的更多详细信息?
  • 我编辑了代码以显示我添加的内容和出现的错误。

标签: reactjs graphql mutation


【解决方案1】:

我想你忘了提取这一行上的变量onCreateReview={variables =&gt; submitCreateReview({ variables })} 它应该是onCreateReview={({variables })=&gt; submitCreateReview({ variables })}

【讨论】:

    猜你喜欢
    • 2019-07-26
    • 2019-11-21
    • 2018-09-19
    • 2021-11-24
    • 2022-10-23
    • 2019-01-31
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多