如何解决无参数字段的 Apollo 缓存重定向
mutation login($password: String!,$email: String) {
login(password: $password,email: $email) {
jwt
user {
account {
id
email
}
}
}
}
另一方面,我有一个获取帐户详细信息的查询。后端通过与请求一起发送的 JWT 令牌来验证它是哪个用户,因此无需将帐户 ID 作为参数发送。
query GetUser {
user {
account {
id
email
}
}
}
我现在面临的问题是:Apollo 每次都发出网络请求,因为 GetUser 没有任何参数。我会先从缓存中查询。所以我想,我可以按照 here 的描述重定向。
首先,我遇到了用户字段不直接返回 id 的问题,所以我定义了一个类型策略:
const typePolicies: TypePolicies = {
User: {
keyFields: ["account",["id"]],},}
const typePolicies: TypePolicies = {
User: {
keyFields: ["account",Query: {
fields: {
user(_,{ toReference }) {
return toReference({
__typename: "User",account: {
id: "1234",})
},}
这行得通,但是当然有一个固定的 id。有没有办法通过始终重定向到登录时查询的用户对象来解决此问题?
解决方法
我已经通过 readField 函数解决了这个问题:
Query: {
fields: {
user(_,{ toReference,readField }) {
return readField({
fieldName: "user",from: toReference({
__typename: "LoginMutationResponse",errors: null,}),})
},},
如果找不到引用会怎样?看来阿波罗当时没有提出请求。是对的吗?怎么解决?
我在测试中注意到了这一点,因为没有执行登录查询。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。