阿波罗链接状态不适用于巨大的数据集

时间:2019-02-14 20:43:46

标签: graphql apollo-client 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中的默认值中……保持两个单独的,巨大的需求似乎如此……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>

现在,我遇到了错误,因为“默认”实际上需要其中的所有内容……我只是看不到它的可维护性……。阿波罗想不出更好的方法?我想念什么?

0 个答案:

没有答案