apollo-link-state не практично с ОГРОМНЫМИ наборами данных - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь заставить это apollo-link-state работать для моего приложения, которое использует огромное количество вложенных данных.Я пошел по этому пути, потому что фронтальная загрузка всех этих данных занимает 20 секунд, этого не может быть.Итак, я решил загрузить минимум, а затем, когда пользователь перемещается по сайту, я делаю необходимые вызовы и объединяю его в кеш.

В этом проблема.Я должен определить набор данных DEFAULT, а затем я должен создать запрос для него.Действительно ли необходимо иметь запрос, который ожидает сотни точек данных, ТОГДА определите значения по умолчанию для всего этого ... Это слишком большая работа только для кэширования данных.Каждый пример, который я вижу о apollo-link-state, - это какой-то глупый 2-х слойный текст, и все говорят: «Посмотрите, как это просто ...», да, но это совершенно не практично, ЕСЛИ Я что-то здесь упускаю ... какие у меня варианты ...

Итак, в моем клиентском файле у меня есть

const defaults = {
    id: '',
    session: {
      id: '',
      user_id: '',
      first_name: '',
      last_name: '',
      admin: '',

    advertisers: {
      /// bunch of values
      administrators: {
        // bunch of values
        permissions: {
           // bunch of values
        }
      }
    },
    products: {
      automotive: {
        // bunch of nested object with values
      },
      sports: {
        // bunch of nested object with values
      },
      entertainment: {
        // bunch of nested object with values
      },
    },
};

const resolvers = {};

const cache = new InMemoryCache();
const stateLink = withClientState({ cache, defaults, resolvers });
const apolloClient = new ApolloClient({
  cache,
  link: ApolloLink.from([stateLink, new HttpLink({
    uri: `${config.url}/graphql`,
    credentials: 'include'
  })]),
  addTypename: true,
  dataIdFromObject
});

. По умолчанию это даже не половина того, что мне нужно.

Затем в своем запросе я называюЯ готов начать загрузку, а затем добавить @client к тем, кого я "сливаю на стороне клиента" ... НО, теперь мне нужно управлять двумя отдельными файлами, чтобы достичь, и есть много избыточности. Но мой запроспросто файл GIANT, потому что мне нужно все там кэшировать, потому что когда пользователь перемещается по сайту, ему нужны разные элементы из разных частей запроса.

Итак, когда я запускаю это, он выдает ошибку, потому что ожидаетВСЕ, чтобы быть в этих значениях по умолчанию, которые находятся в SESSION_QUERY ... поддержание двух отдельных, гигантских потребностей, кажется таким ... угаданным.Я, должно быть, что-то упускаю.

<Query query={SESSION_QUERY}>
  {({ loading, error, data }) => {
    // render appropriate component depending on loading/error state
    console.log("IN QUERY:::: ", loading, error, data, this.props.client.readQuery({ query: SESSION_QUERY }));


    return null;
  }}
</Query>

Теперь я получаю ошибки, потому что «по умолчанию» буквально нужно все в нем ... Я просто не понимаю, как это можно обслуживать .... Аполлон не могне думаете о лучшем способе?Чего мне не хватает?

...