将变量传递给 apollo 查询时出错

Error when passing variable to apollo query

创建了一个类似于此 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} /> 结果出错。

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

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

这相当于:

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

因此您提供的变量名为 _id,而不是 id。将变量属性更改为:

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