Учитывая запрос, который возвращает ответ со многими уровнями, например, этот запрос на GitHub API GraphQL :
query {
viewer {
starredRepositories(first: 100) {
edges {
node {
repositoryTopics(first: 100) {
edges {
node {
id
topic {
id
name
}
}
}
}
}
}
}
}
}
Как можно нормализовать темы и сохранить их в магазине, используя apollo-link-state
?
{
topics: [Topic]
}
В настоящее время мой магазин настроен следующим образом:
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
:
{
topics: { ... },
viewer: User
starredRepositories({"first":100}): StarredRepositoryConnection
...
}
А также все сущности , нормализованные на apollo-cache-inmemory
.