Запустить запрос Apollo только при монтировании компонента React (без queryData и жизненного цикла)

Я широко использую Apollo в довольно большом приложении React, которое я создаю, и несколько раз сталкивался с одним и тем же ограничением.

Я хочу выполнить запрос только при монтировании компонента, чтобы изменение этого подмаршрута компонента не приводило к повторному запуску запроса. Я также действительно хочу сохранить шаблон контейнера, в котором я объявляю свой запрос в контейнере, оборачиваю свой компонент и забываю об этом, чтобы сам мой компонент оставался чистым от любого материала Apollo. До сих пор мне удавалось это сделать, создав собственный компонент Apollo высокого порядка, который принимает компонент, запрос и его параметры и возвращает новый компонент, который автоматически запускает queryData на componentDidMount. Вот код. Затем я использую его так: apolloQueryHOC(MyComponent, queryOptions);

Но в новом компоненте я начал реализовывать разбиение по страницам, и этот подход просто не работает / становится слишком уродливым для сложной логики разбиения по страницам, которую я реализовал. Дело в том, что это работает как шарм, когда я использую базовый контейнерный подход Apollo. Но он работает при каждом изменении маршрута / реквизита.

Итак, у меня вопрос: есть ли способ запустить "контейнерный" запрос только при монтировании, кроме использования withApollo и т. Д.?


person Bertrand    schedule 14.06.2017    source источник


Ответы (1)


На самом деле проблема заключалась в том, что я обрабатывал аутентификацию в промежуточном программном обеспечении, поэтому мой запрос имел '' как токен, а токен был извлечен из indexedDB и добавлен к запросу в промежуточном программном обеспечении, переопределив ''. Таким образом, результат запроса, хранящийся в хранилище Apollo (с правильным токеном в качестве параметра), никогда не соответствовал запросу с '' в качестве токена, что приводило к тому, что Apollo снова и снова запрашивал с сервера.

person Bertrand    schedule 15.06.2017