Реагировать на ошибку Apollo: инвариантное нарушение: не удалось найти «клиента» в контексте или передать как опцию - PullRequest
0 голосов
/ 20 октября 2019

Я строю проект, используя React, Apollo и Next.js. Я пытаюсь обновить response-apollo до 3.1.3, и теперь я получаю следующую ошибку при просмотре сайта.

Инвариантное нарушение: не удалось найти «клиента» в контексте или переданов качестве опции. Оберните корневой компонент в или передайте экземпляр ApolloClient с помощью опций.

Если я понизил пакет response-apollo до версии 2.5.8, он работает без проблем, поэтому я думаю, что что-то изменилось между2.5 и 3.x, но не могу найти что-либо в реактивной реакции-apollo или next-with-apollo, чтобы указать, что это может быть. Любая помощь будет принята с благодарностью.

withData.js

import withApollo from 'next-with-apollo';
import ApolloClient from 'apollo-boost';
import { endpoint } from '../config';

function createClient({ headers }) {
    return new ApolloClient({
        uri: endpoint,
        request: operation => {
            operation.setContext({
                fetchOptions: {
                    credentials: 'include'
                },
                headers
            });
        },
        // local data
        clientState: {
            resolvers: {
                Mutation: {}
            },
            defaults: {}
        }
    });
}

export default withApollo(createClient);

_app.js

import App from 'next/app';
import { ApolloProvider } from 'react-apollo';
import Page from '../components/Page';
import { Overlay } from '../components/styles/Overlay';
import withData from '../lib/withData';

class MyApp extends App {
    static async getInitialProps({ Component, ctx }) {
        let pageProps = {};
        if (Component.getInitialProps) {
            pageProps = await Component.getInitialProps(ctx);
        }

        // this exposes the query to the user
        pageProps.query = ctx.query;
        return { pageProps };
    }

    render() {
        const { Component, apollo, pageProps } = this.props;

        return (
            <ApolloProvider client={apollo}>
                <Overlay id="page-overlay" />
                <Page>
                    <Component {...pageProps} />
                </Page>
            </ApolloProvider>
        );
    }
}

export default withData(MyApp);

1 Ответ

2 голосов
/ 20 октября 2019

В моем случае я обнаружил, что у меня установлено react-apollo@3.0.1 и @apollo/react-hooks@3.0.0. Удаление @apollo/react-hooks и простое использование react-apollo устранили проблему с инвариантом для меня. Убедитесь, что вы не используете какие-либо несовпадающие версии в своем файле блокировки или package.json

Это то, что кто-то сказал в теме выпуска GitHub, что также относится и ко мне. Обязательно попробуйте!

...