【发布时间】:2022-01-20 22:26:16
【问题描述】:
使用 React Native 和 Apollo 客户端,我正在尝试从不同的请求字段正确写入和读取缓存。 我基本上有两种对象类型:“用户”和“事件”,我有那些“请求:
所有事件:(事件列表屏幕)
events {
id
numberOfParticipants
}
已连接用户及其注册的事件:(议程屏幕)
me {
id
myEvents {
id
}
}
用户注册事件的突变:(事件详细信息屏幕)
mutation {
registerToAnEvent (id: number) {
event {
id
numberOfParticipants
}
}
当用户通过调用突变注册事件时:
我已经做了什么:缓存已更新,事件列表屏幕数据立即受到影响。 (参加人数变化)
我现在想要实现的目标:我想立即从缓存修改中影响议程屏幕。无论出于何种原因,我都必须调用 refetch 来更新它。 (当用户注册/注销时,事件应该消失或从列表中出现)
这是我的 InMomoryCache 实现的一些代码:
Query: {
fields: {
event: {
read(_, {args, toReference}) {
return toReference({
__typename: 'Event',
id: args.id,
});
},
},
events: {
keyArgs: false,
merge(existing: any[], incoming: any[], allArgs) {
const events: any[] = existing ? Object.values({...existing}) : [];
const newEvents = incoming ? incoming : [];
newEvents.forEach((event: any) => {
events.push(event);
});
return events;
},
},
},
User: {
fields: {
eventsParticipating: {
merge(existing: any[], incoming: any[], allArgs) {
const events: any[] = existing ? Object.values({...existing}) : [];
const newEvents = incoming ? incoming : [];
newEvents.forEach((event: any) => {
events.push(event);
});
return events;
},
},
},
感谢您的帮助:)
【问题讨论】:
标签: react-native graphql apollo apollo-client react-apollo