Apollo React Mutation组件内部的自定义定义变量

时间:2018-10-12 09:44:00

标签: reactjs graphql apollo react-apollo graphql-js

我的后端处理AddLike突变。这需要一个UserId和CommentId或PitchId。取决于您想要的。我想在整个应用过程中重用我的LikeButton组件。这样,我需要在Apollo React Mutation中定义变量以采用CommentId或PitchID。现在,我似乎无法使任何工作。有什么建议么? :-)

在此提供组件的代码。 API GrahQL有效。所以没有什么可以改变的。

import * as React from 'react';
import { Mutation } from 'react-apollo';
import { ADD_LIKE } from '../../GraphQLStatements/GraphQLStatements'; 

interface ILikeButtonProps {
currentUser : number;
type : any;
index: number;
}

const LikeButton: React.SFC<ILikeButtonProps> = (props) => {
let inputType : string = "pitchId"

const DefineType = () => {
    if (props.type === "comment") {
        inputType = "commentId"
    }
    else {
        inputType = "pitchId"
    }
}

return (
    <Mutation mutation={ADD_LIKE}>
        {(addLike) => (
            <i className="far fa-thumbs-up icon like__button"
                onClick={e => {
                e.preventDefault();
                e.stopPropagation();
                DefineType()
                addLike({ variables : { like : 
                    { "userId": props.currentUser,
                       inputType : props.index}
                    } 
                }).then ((res : any) => {
                    console.log(res.data.addLike.statusMessage)
                });
            }}>
            </i>
        )}
    </Mutation>
 );
};

export default LikeButton;

现在,这不起作用。预先感谢!

1 个答案:

答案 0 :(得分:0)

在inputType周围添加方括号是可行的:

addLike({ variables : { like : 
          { "userId": props.userId,
            [inputType]: props.id}
          }