我试图让这个 apollo-link-state 为我的应用程序工作,它依赖于大量的嵌套数据。我走这条路是因为前面加载所有数据需要 20 秒,不能这样。所以,我想加载最简单的,然后当用户移动到站点时,我会进行必要的调用并将其合并到缓存中。
这是问题所在。我必须定义一个默认数据集,然后我必须为它创建查询。是否真的有必要进行一个需要数百个数据点的查询,然后为所有这些定义默认值.....仅仅缓存数据就需要做很多工作。我看到的关于 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 中的默认值中......保持两个单独的巨大需求似乎如此......ugggggh。我肯定错过了什么。
<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>
现在,我遇到了错误,因为“默认”实际上需要其中的所有内容……我只是不明白这是如何维护的……阿波罗想不出更好的方法吗?我错过了什么?