Нет необходимости в мобх или редуксе.
Apollo-link-state достаточно для управления состоянием локального приложения и является единственным источником правды для ваших данных.
import {withClientState} from 'apollo-link-state'
import typeDefs from '../schema/schema'
import resolvers from '../resolvers'
const initialState = {
intialData: [],
myData: {
__typename: 'MyDataType',
},
}
async function getLocalLinkState(cache) {
const stateLink = withClientState({
cache,
defaults: initialState,
resolvers: resolvers,
typeDefs
})
return stateLink
}
export default getLocalLinkState
В основном вы создаете typedefs (не обязательно) и распознаватели так же, как ваш сервер GraphQL.
Таким образом, ваш initialState
будетбыть общим как глобальное состояние, которое вы можете читать или записывать, используя запросы на стороне клиента и мутации на стороне клиента.
Эти запросы и мутации на стороне клиента будут разрешаться распознавателями на стороне клиента, а не распознавателями на стороне сервера (если вы использовали @клиент)
Запрос на стороне клиента:
const query = gql`
{
counter @client
}
`;
Примеры средств разрешения мутаций
decrementCounter: (_, params, { cache }) => {
const { counter } = cache.readQuery({ query });
const nextCounter = counter - 1;
const data = {
counter: nextCounter,
};
cache.writeData({ data });
return nextCounter;
},
incrementCounter: (_, params, { cache }) => {
const { counter } = cache.readQuery({ query });
const nextCounter = counter + 1;
const data = {
counter: nextCounter,
};
cache.writeData({ data });
return nextCounter;
},
Любые компоненты, потребляющие локальныеСостояние приложения будет обновлено, если произойдет какое-либо изменение в части состояния приложения, которое они потребляют.