Поскольку похоже, что вы уже используете apollo, вы должны использовать apollo-link-state . Ссылка на состояние позволяет эффективно управлять состоянием клиента через apollo.
Настройка вашего клиента будет выглядеть примерно так:
import { ApolloClient } from 'apollo-client'
import { ApolloLink } from 'apollo-link'
import { InMemoryCache } from 'apollo-cache-inmemory'
import { HttpLink } from 'apollo-link-http'
import { withClientState } from 'apollo-link-state'
const cache = new InMemoryCache()
const stateLink = withClientState({
cache,
resolvers,
defaults,
})
const client = new ApolloClient({
cache,
link: ApolloLink.from([stateLink, new HttpLink()]),
})
defaults
, который вы передаете withClientState
, определяет ваше начальное состояние, а объект resolvers
определяет поведение только для клиентских запросов и мутаций.
const defaults = {
foo: {
__typename: 'Foo',
бар: «Бар»,
}
}
const resolvers = {
Mutation: {
updateFoo: (_, { bar }, { cache }) => {
const data = {
foo: {
bar,
__typename: 'Foo'
}
}
cache.writeData({ data })
return data.foo
}
}
}
Затем вы можете использовать директиву @client
для определения мутаций и запросов, которые должны быть разрешены с помощью ссылки состояния:
mutation DoSomething($bar: String) {
updateFoo(bar: $bar) @client
}
Прочитайте документы для более полного объяснения и отличных примеров.