变量ID!在graphql变异中保持未定义

时间:2017-05-13 11:44:25

标签: graphql graphql-js apollo react-apollo

我有突变 -

`export const setTimeLineOnUser = gql 
    mutation ($tID: ID!, $uID: ID! ){
        setTimeLineOnUser(userTimeLineId: $tID, timeLineUserId: $uID){
            userTimeLine {
                id
                updatedAt
                posts{
                    id
                    postType
                    updatedAt
                }
            }
            timeLineUser {
                id
                name
                email
            }
        }
    };`

和一个看起来像这样的函数 -

`this.props.createTimeLine().then((response) => {
            console.log(response.data.createTimeLine.id);
            this.addTimeLineToUser(response.data.createTimeLine.id, this.props.userQuery.user.id);
        });`

用户有这样的一对一关系 -

`setTimeLineOnUser(userTimeLineId: ID!, timeLineUserId: ID!): SetTimeLineOnUserPayload`

现在正在运行我收到此错误 -

  

错误:GraphQL错误:类型为“ID!”的变量'$ tID'预期值但价值未定义。原因:预期的非空值,找到null。 (第1行,第11栏):   变异($ tID:ID!,$ uID:ID!){             ^   GraphQL错误:'ID'类型的变量'$ uID'预期值但价值未定义。原因:预期的非空值,找到null。 (第1行,第22栏):   变异($ tID:ID!,$ uID:ID!){                        ^       在新的ApolloError(apollo.umd.js:1959)       在apollo.umd.js:2670       在tryCallOne(core.js:37)       在core.js:123       在JSTimers.js:117       at Object.callTimer(JSTimersExecution.js:95)       at Object.callImmediatesPass(JSTimersExecution.js:199)       at Object.callImmediates(JSTimersExecution.js:214)       在MessageQueue.js:228       在MessageQueue .__ guard(MessageQueue.js:218)

虽然console.log(this.props.userQuery.user.id);正在返回有效ID! 我甚至尝试将变量分配给状态,以便它们可能不会为空但仍然没用!我做错了什么?

如果你想看到这些文件 - Gist

1 个答案:

答案 0 :(得分:0)

问题在于,当您调用addTimelineToUser给出一个对象但需要两个参数时。

    componentDidMount(){

        this.props.createTimeLine().then((response) => {
            // this.addTimeLineToUser({ tID: response.data.createTimeLine.id, uID: this.props.userQuery.user.id }) wrong
            this.addTimeLineToUser(response.data.createTimeLine.id, this.props.userQuery.user.id)
        });
    }


    addTimeLineToUser = (tId, uId) => {
        this.props.setTimeLineOnUser({variables: {tId, uId}})
            .then((response) => {
                console.log(response);
            }).catch((err) => {
                console.log(err);
        });
    };

可能这不起作用,因为我不确定查询是否在组件内部加载了mount函数。