apollo-link-state не практично с ОГРОМНЫМИ наборами данных
Я пытаюсь заставить это 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>
Теперь я получаю ошибки, потому что "по умолчанию" нужно буквально все в нем... Я просто не понимаю, как это можно обслуживать.... Аполлон не мог придумать лучшего способа? Что мне не хватает?