0

我试图让这个 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>

现在,我遇到了错误,因为“默认”实际上需要其中的所有内容……我只是不明白这是如何维护的……阿波罗想不出更好的方法吗?我错过了什么?

4

0 回答 0