【发布时间】:2019-11-14 15:41:24
【问题描述】:
"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>
);
}
}
商店在调用后更新,但 UI 组件仅在第二个发布事件时重新呈现。
UI 组件的设置方式如下:
<Query
query={MY_PURCHASES}
variables={{ status: ['INPREPARATION', 'PROCESSED', 'READYFORCOLLECTION', 'ONTHEWAY', 'ATLOCATION'] }}
>
...
<Query />
通过在调用 writeQuery 后读取缓存,我能够验证存储是否反映了正确的状态,但是 UI 组件只会在第二次调用时更新。
我在这里错过了什么?
【问题讨论】:
标签: apollo react-apollo apollo-client