【发布时间】:2022-07-13 17:46:09
【问题描述】:
我正在尝试对每次重新获取(过滤列表)使用合并功能,但现有值始终未定义。
返回和过滤列表的查询类型策略:
Query: {
fields: {
accounts: {
keyArgs: false,
merge(
existing,
incoming,
{args: {page = 1, pageSize = 20}, readField}
) {
const offset = (page - 1) * pageSize;
if (!existing?.items) {
return incoming;
}
const mergedItems = [...existing.items];
const existingIdSet = new Set(
mergedItems.map((item) =>
readField('externalReferenceCode', item)
)
);
const incomingItems = [...incoming.items].filter(
(item) =>
!existingIdSet.has(readField('externalReferenceCode', item))
);
for (let i = 0; i < incomingItems.length; ++i) {
mergedItems[offset + i] = incomingItems[i];
}
return {
...existing,
items: mergedItems,
};
},
read(existing, {args: {page = 1, pageSize = 20}}) {
const offset = (page - 1) * pageSize;
if (!existing) {
return;
}
return {
...existing,
items: existing.items?.slice(offset, offset + pageSize),
};
},
},
},
},
我做错了什么? 通过读取函数检查,值按预期传递,但调用重新获取时为空。
对于合并,首先是现有值。 在读取时,打印出来的值是现有值。
typePolicy.js:34 merge undefined {__typename: 'AccountPage', items: Array(20), totalCount: 235}
typePolicy.js:108 read {__typename: 'AccountPage', items: Array(20), totalCount: 235}
typePolicy.js:34 merge undefined {__typename: 'AccountPage', items: Array(2), totalCount: 2}
typePolicy.js:108 read {__typename: 'AccountPage', items: Array(2), totalCount: 2}
这是查询:
const GET_ACCOUNTS = gql`
query getAccounts($filter: String, $pageSize: Int = 20, $page: Int = 1) {
accounts(filter: $filter, pageSize: $pageSize, page: $page) {
items {
id
externalReferenceCode
name
}
totalCount
}
}
`;
【问题讨论】:
标签: javascript reactjs apollo-client react-apollo