我正在尝试使此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中的默认值中……保持两个单独的,巨大的需求似乎如此……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>
现在,我遇到了错误,因为“默认”实际上需要其中的所有内容……我只是看不到它的可维护性……。阿波罗想不出更好的方法?我想念什么?