Операция «FooQuery», обертывающая «Foo», ожидает переменную, но она не была найдена с помощью react-apollo.

У меня проблема с реакцией аполлона. Даже не вызывая запрос в классе Foo:

Операция «FooQuery», обертывающая «Foo», ожидает переменную: «id», но она не была найдена в реквизитах, переданных «Apollo (Foo)».

class Foo extends React.Component {
    render() {
        return <div />
    }
}

const FOO_QUERY = gql`
    query FooQuery($id: ID!) {
        foo(id: $id) {
            bar
        }
    }
`

export default graphql(FOO_QUERY, { name: 'fooQuery' })(Foo)

person Andrey    schedule 10.07.2018    source источник
comment
Не следует ли передать в запрос переменную id вместо name?   -  person Tholle    schedule 10.07.2018
comment
Это свойство, которое позволяет настроить имя реквизита. Так что я могу позвонить: this.props.fooQuery   -  person Andrey    schedule 10.07.2018
comment
Ты прав, мой плохой. Как вы используете этот компонент? Вы передаете ему реквизит id?   -  person Tholle    schedule 10.07.2018
comment
Я пробую Foo.propTypes = { id: PropTypes.string.isRequired } и Foo.defaultProps = { id: 'a' }. Тот же результат   -  person Andrey    schedule 10.07.2018
comment
Да, но я думаю, проблема в том, как вы используете этот экспортированный компонент в остальной части вашего приложения, а не в том, как вы его определили. Если вы используете компонент без передачи реквизита id, я думаю, вы получите эту ошибку.   -  person Tholle    schedule 10.07.2018
comment
@Tholle Работает как шарм, спасибо!   -  person Andrey    schedule 10.07.2018
comment
@Tholle, как сделать идентификатор необязательным? Я пытаюсь создать форму, в которую пользователь может вставлять или обновлять   -  person Andrey    schedule 10.07.2018


Ответы (1)


Ваш компонент выглядит правильно. Проблема не в том, как вы его определили, но вы должны убедиться, что вы передаете id реквизит вашему Foo компоненту при его использовании в вашем приложении:

<Foo id="some_id" />
person Tholle    schedule 10.07.2018