"apollo-cache-inmemory": "^1.6.2",
"apollo-client": "^2.6.3",
Я устанавливаю простую подписку с помощью метода client.subscribe и пытаюсь обновить хранилище с помощью метода client.writeQuery
export default class App extends Component<Props> {
componentDidMount() {
this.purchaseSubscription = client.subscribe({
query: PURCHASE_ASSIGNED_SUBSCRIPTION,
variables: { status: ['INPREPARATION', 'PROCESSED', 'READYFORCOLLECTION', 'ONTHEWAY', 'ATLOCATION'] },
}).subscribe({
next: (subscriptionData) => {
const { cache } = client;
const prev = cache.readQuery({
query: MY_PURCHASES,
variables: { status: ['INPREPARATION', 'PROCESSED', 'READYFORCOLLECTION', 'ONTHEWAY', 'ATLOCATION'] },
});
const newPurchase = subscriptionData.data.purchaseAssignedToMe;
const data = { myPurchases: [...prev.myPurchases, newPurchase] };
cache.writeQuery({
query: MY_PURCHASES,
variables: { status: ['INPREPARATION', 'PROCESSED', 'READYFORCOLLECTION', 'ONTHEWAY', 'ATLOCATION'] },
data,
});
},
error: (err) => { console.error('err', err) },
});
}
render() {
return (
<ApolloProvider client={client}>
<AppContainer />
</ApolloProvider>
);
}
}
Хранилище обновляется после вызова, однако компонент пользовательского интерфейсаперерисовывается только во втором событии публикации.
Компоненты пользовательского интерфейса настраиваются следующим образом:
<Query
query={MY_PURCHASES}
variables={{ status: ['INPREPARATION', 'PROCESSED', 'READYFORCOLLECTION', 'ONTHEWAY', 'ATLOCATION'] }}
>
...
<Query />
При чтении кеша после вызова writeQuery я смог проверитьчто хранилище отражает правильное состояние, однако компонент пользовательского интерфейса обновляется только при каждом втором вызове.
Что мне здесь не хватает?