Релейный кэш с Flux Pattern?

Я бы очень хотел включить кэш Relay в свой магазин Flux, чтобы я мог совершать «путешествия во времени» и получать более глубокое представление о приложении.

Похоже, что хранилище Relay и действия - это все классы, которые не сериализуются, что является обломом. Но похоже, что я должен иметь возможность отделить кеш от сетевых запросов и сохранить кеш в хранилище Flux.

Звучит интересно, или я лаю не по тому дереву?


person Chet    schedule 22.12.2015    source источник


Ответы (1)


Relay, безусловно, можно использовать вместе с Flux, и мы поговорили со многими разработчиками, которые успешно используют их вместе. Общий шаблон заключается в том, чтобы позволить Relay владеть кешем данных сервера и управлять связью с сервером, а также использовать Flux для хранения и обновления данных только для клиента.

Чтение данных реле из Flux

Если хранилищам Flux нужен доступ к данным сервера, они могут использовать Relay.Store API для извлечения данных с сервера и чтения их из кеша:

// build a query 
var query = Relay.createQuery(Relay.QL`query { ... }`, {var: 'value'});
// fetch any missing data for this query
Relay.Store.primeCache({query}, readyState => {
  if (readyState.done) {
    // read data once the cache is populated
    var data = Relay.Store.readQuery(query)[0];
  }
});

Проверка кэша реле

Relay не поддерживает отладку с перемещением во времени напрямую. Тем не менее, мы активно работаем над инструментами разработчика для Relay, и вскоре должна быть доступна его начальная версия. А пока есть несколько вариантов проверки состояния кеша:

  • Перехватывайте и записывайте все низкоуровневые обновления в хранилище Relay. Это можно сделать, внедрив диспетчер кеша с RelayStoreData.getDefaultInstance().injectCacheManager(...) (обратите внимание, что имена API могут измениться, но сам API диспетчера кеша стабилен). Интерфейс CacheManager определен здесь. обратите внимание, что это позволит вам записывать все значения, записанные в кэш Relay, для создания любой визуализации данных, которую вы хотите. Все значения полей, записываемые в диспетчер кеша, сериализуемы в формате JSON. Обратите внимание, что диспетчер кеша не может записывать данные обратно в хранилище, поэтому это в первую очередь позволит вам видеть текущее состояние кеша.
  • Перехватывайте все запросы и запросы на изменения на сетевом уровне, вводя пользовательский сетевой уровень. Это даст представление о том, какие данные запрашивает ваше приложение и что оно получает обратно с сервера.
person Joe Savona    schedule 28.12.2015
comment
Интересно. Таким образом, я могу внедрить свой собственный менеджер кеша, который отправляет действия через мои хранилища Flux и таким же образом перехватывает мутации и сетевые запросы. Хм. Я все еще пытаюсь понять, как справиться с синхронной загрузкой данных из кеша из кеша, а не с рендерингом загрузки и ожиданием быстрого кругового пути... - person Chet; 30.12.2015
comment
Relay не поддерживает синхронную загрузку данных из кэша — поскольку загрузка может быть асинхронной, API всегда является асинхронным для согласованности. - person Joe Savona; 03.01.2016
comment
Так что, если данные находятся в кеше, вы все равно будете вынуждены сначала показывать экран загрузки? - person Chet; 05.01.2016