将变量传递给阿波罗查询时出错

时间:2019-05-11 01:51:41

标签: reactjs apollo react-apollo graphql-js

创建了一个与此example类似的Apollo查询,但不断出现此错误:Variable "$id" of required type "ID!" was not provided.

我的模式:

type RootQuery {
    person(_id: ID!): Person!
}

和解析器:

 person: async args => {
    const person = await Person.findById(args._id);
    return {
      _id: person._id,
      name: person.name,
      location: person.location,
      address: person.address,
    };
  }

localhost:3000/graphql中正常运行 我正在传递一个ID并取回数据。

但是,它在客户端不起作用,错误提示未提供ID。

查询

const GET_PERSON_QUERY = gql`
  query person($id: ID!) {
    person(_id: $id) {
      _id
      name
      location
      address
    }
  }
`;

查询组件

export const GetPerson = ({ _id }) => {
  console.log("id: ", _id);
  return (
    <Query query={GET_PERSON_QUERY} variables={{ _id }}>
      {({ loading, error, data }) => {
        if (error) return <div>Error loading posts</div>;
        if (loading) return <div>Loading...</div>
          );
        return (
          <ul>
            <li>{data.person.name}</li>

          </ul>
        );
      }}
    </Query>
  );
};

例如,将此变量const _id = "abcabc"传递给组件 <GetPerson _id={_id} />导致错误。

1 个答案:

答案 0 :(得分:1)

如错误所示,id是必需变量,但您没有传递它。这是您的代码,它使用属性速记语法:

<Query query={GET_PERSON_QUERY} variables={{ _id }}>

这等效于:

<Query query={GET_PERSON_QUERY} variables={{ _id: _id }}>

因此,您要提供一个名为_id而不是id的变量。将变量prop更改为:

<Query query={GET_PERSON_QUERY} variables={{ id: _id }}>