Graphql: есть ли способ обновить запрос с новыми полями, не объявленными в схеме? - PullRequest
0 голосов
/ 05 февраля 2019

Итак, у меня есть запрос сеанса, который я использую для загрузки при входе в систему.Поскольку нагрузка была слишком большой (да, загружается тонна данных приложения), я много урезал эту «сессию».НО, проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда я выполняю мутацию, я не могу обновить сеанс, потому что кажется, что ТОЛЬКО объявленные мной поля обновлены, а все остальное из мутации игнорируется.

Примечание: Я хочу обновить мутацию на стороне клиента.

Итак, у меня есть что-то вроде этого:

@graphql(SESSION_QUERY)
class Foo etc....

Теперь этот сеанс имеет ограниченные данные в своей схеме, например:

query Session {
  session {
    id
    user_id
    first_name
    last_name
    products {
      shoes {
        id
        sizes
      }
      pants {
        id
        sizes
      }
      shirts {
        id
        sizes
      }
    }
  }

объем данных огромен, так что я действительно урезал его.Теперь мои мутации создают «новый» элемент на основе того, что «добавляет» пользователь.

Вот проблема, скажем, пользователь «создал рубашку», но с этой мутацией пользователь создает «размеры»"," цены "," коды купонов "и т. д., поэтому я хочу, чтобы мой массив" рубашка "в этом случае обновлялся ala ..

        update: (store: ApolloStore, results: *) => {
          const data = store.readQuery({ query: SESSION_QUERY });
          const products = data.session.products[productType] || [];
          data.session.products[productType] =
          products.concat(results.data['createProductShirt']);
          store.writeQuery({ query: SESSION_QUERY, data });
        }

console.logging до и после записина самом деле показать обновление, НО сеанс фактически никогда не обновляется.Кажется, он просто фильтруется для обновления только идентификатора и размеров.Мне нужно обновить возвращаемый набор ВОЗВРАТА.

В основном, когда мой компонент получает новые реквизиты, обновление мутации не происходит.

Есть ли способ обновить этот сеанс, даже когда конкретные значенияне определено в схеме?

Я бы предпочел не использовать избыточность, и мое использование кажется не таким уклончивым, как использование apollo-link-state (что кажется немного сложным).

1 Ответ

0 голосов
/ 05 февраля 2019

Вам не нужно вручную обновлять хранилище apollo, как это - кеш Apollo должен сохранять все для вас при условии, что у него есть необходимые идентификаторы для установления каких-либо отношений между данными.

Что означает настройка кеша Apolloкак выглядит в вашем клиенте?Вы пытались использовать Apollo Dev-tools , чтобы увидеть, что происходит в вашем кэше?

В качестве альтернативы reftechQueries недостаточно для обновления данных, возвращаемых из запроса сеанса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...