Ошибка при передаче переменной в запрос apollo - PullRequest
0 голосов
/ 11 мая 2019

Создал запрос 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 Я передаю идентификатор и возвращаю данные.

Тем не менее, он не работает на стороне клиента, ошибка говорит, что идентификатор не 't предоставлено.

запрос

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 Ответ

1 голос
/ 11 мая 2019

Как показывает ошибка, id является обязательной переменной, но вы не передаете ее. Это ваш код, который использует синтаксис свойства:

<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 }}>
...