我正在使用apollo codgen为我的graphql查询生成类型,并使用TS,发现生成的类型中包含许多null
值,因此我的代码变成了{{ 1}}检查。人们是用TS编写他们的graphql缓存更新的方式吗?
if
这感觉很不对,在我知道this.props.mutate({
variables,
update: (proxy, { data }) => {
// nulls all the way down so guarding against them with early return
if (!data || !data.createContact || !data.createContact.contact) return;
let newContactEdge = {
node: { ...data.createContact.contact, __typename: 'Contact' },
__typename: 'ContactEdge',
};
// read from cache
let listCache = proxy.readQuery<ListContactsQuery>({ query: ChatAPI.queries.listContacts });
// again nulls all the way down
if (listCache && listCache.contacts && listCache.contacts.edges) {
proxy.writeQuery({
query: ChatAPI.queries.listContacts,
data: {
...listCache,
contacts: {
...listCache.contacts,
edges: [newContactEdge, ...listCache.contacts.edges],
},
},
});
}
},
})
是否不为空之前,数据就已经存在了,而不必一直检查下去。
作为参考,以下是该cache
ListContactsQuery
答案 0 :(得分:0)
有点晚了,但仍然有人会觉得它有用。为了减少客户端上的空检查数量(或更确切地说,Maybe<>
类型的数量),您必须适当地设置服务器端模式。例如。在GraphQL .net中:
Field<ListGraphType<RoleType>>()
.Name(QueryName.Roles)
.Resolve(context => AuthRoleRepo.LoadAllAuthRoles())
.RequirePermission(Const.Roles.Admin);
成为
Field<NonNullGraphType<ListGraphType<NonNullGraphType<RoleType>>>>()
.Name(QueryName.Roles)
.Resolve(context => AuthRoleRepo.LoadAllAuthRoles())
.RequirePermission(Const.Roles.Admin);
请注意为返回类型指定的所有NonNullGraphType
。 ListGraphType<RoleType>
=> NonNullGraphType<ListGraphType<NonNullGraphType<RoleType>>>