首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使阿波罗链接状态正常化?

如何使阿波罗链接状态正常化?
EN

Stack Overflow用户
提问于 2018-09-07 16:20:36
回答 1查看 478关注 0票数 0

给定一个返回多个级别响应的查询,例如Github的GraphQL API上的这个查询

代码语言:javascript
复制
query {
  viewer {
    starredRepositories(first: 100) {
      edges {
        node {
          repositoryTopics(first: 100) {
            edges {
              node {
                id
                topic {
                  id
                  name
                }
              }
            }
          }
        }
      }
    }
  }
}

如何将主题规范化,并使用阿波罗链接状态将其存储到存储区

代码语言:javascript
复制
{
  topics: [Topic]
}

目前,我的商店设置如下:

代码语言:javascript
复制
import { InMemoryCache } from 'apollo-cache-inmemory';
import { ApolloClient } from 'apollo-client';
import { ApolloLink } from 'apollo-link';
import { withClientState } from 'apollo-link-state';

const cache = new InMemoryCache();

const store = withClientState({
  cache,
  defaults: {
    topics: [],
  },
  resolvers: {},
  typeDefs: `
    type Topic {
      id: String!
      name: String!
    }

    type Query {
      topics: [Topic]
    }
  `,
});

const client = new ApolloClient({
  cache,
  links: ApolloLink.from([
    // Other links ... ,
    store,
    // Other links ... ,
  ]),
});

检查我的缓存显示了ROOT_QUERY

代码语言:javascript
复制
{
  topics: { ... },
  viewer: User
    starredRepositories({"first":100}): StarredRepositoryConnection
      ...
}

以及所有实体apollo-cache-inmemory

EN

回答 1

Stack Overflow用户

发布于 2018-09-07 17:05:23

据我所知,规范化数据完全超出了阿波罗查询或缓存的范围。您需要创建某种帮助函数,以便在从缓存中获取对象之后,根据需要将其扁平化。与Redux不同的是,没有中间件可以在其上处理操作并将其存储在缓存中。至少据我所知。我确实找到了归一化,这也许能给你你想要的东西。对我来说,我会坚持简单地将查询包装在一个带有助手函数的组件中,以便在返回之前通过归一化 https://github.com/paularmstrong/normalizr/issues/108通过规范化模式运行获取的对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52226368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档