首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将阿波罗客户端查询结果混合在缓存中

将阿波罗客户端查询结果混合在缓存中
EN

Stack Overflow用户
提问于 2021-12-03 11:28:29
回答 1查看 364关注 0票数 0

我使用阿波罗客户端获取图书图表,并使用中继样式分页。下面的NEW_BOOKS查询和ALL_BOOKS查询都可以独立工作。

目前,我在主页中使用NEW_BOOKS,在主页中使用弹出的ALL_BOOKS。当主页打开时,NEW_BOOKS会很好地加载。打开弹出并获取ALL_BOOKS时,newBooks变成undefinedALL_BOOKS查询的结果。

为什么会发生这种情况?

代码语言:javascript
复制
const { loading, data: newBooks, fetchMore, networkStatus } = useQuery(NEW_BOOKS, {
    variables: {
        first: PAGE_SIZE,
        after: endCursor
    },
    notifyOnNetworkStatusChange: true
});

const NEW_BOOKS = gql`query GetNewBooks($first:Int!, $after:String){
    books(
        first: $first, after: $after,
        filters: [
            {
                path: "isNew",
                value: true
            }
        ]
    ) {
        totalCount
        pageInfo {
            hasNextPage
            hasPreviousPage
            startCursor
            endCursor
        }
        edges {
            node {
                id
                name
                author {
                    id
                    name
                }
            }
        }
    }
}`;

-All图书查询可按名称进行过滤

代码语言:javascript
复制
const { loading, data: filteredBooks, fetchMore, networkStatus } = useQuery(ALL_BOOKS, {
    variables: {
        first: PAGE_SIZE,
        after: endCursor,
        name: nameFilter
    },
    notifyOnNetworkStatusChange: true
});

const ALL_BOOKS = gql`query GetAllBooks($first:Int!, $after:String, $name:String){
    books(
        first: $first, after: $after,
        filters: [
            {
                path: "name",
                value: $name,
                type: "contains"
            }
        ]
    ) {
        totalCount
        pageInfo {
            hasNextPage
            hasPreviousPage
            startCursor
            endCursor
        }
        edges {
            node {
                id
                name
                copiesSold
                author {
                    id
                    name
                }
            }
        }
    }
}`;

正在使用的缓存如下,

代码语言:javascript
复制
const cache = new InMemoryCache({
    typePolicies: {
        Query: {
            fields: {
                books: relayStylePagination(),
            },
        }
    },
});
EN

Stack Overflow用户

回答已采纳

发布于 2021-12-28 08:44:48

当使用keyArgs或类似的分页时,我们必须明确地传递relayStylePagination

keyArgs: ["type"]字段策略配置意味着类型是缓存在访问该字段的值时应该考虑的惟一参数(除了字段名和封闭对象的标识)。keyArgs: false配置禁用了通过参数来区分字段值的整个系统,因此该字段的值将仅由字段的名称(在某些StoreObject中)标识,而不追加任何序列化参数。

这里的KeyArgs文档。

代码语言:javascript
复制
const cache = new InMemoryCache({
    typePolicies: {
        Query: {
            fields: {
                books: relayStylePagination(["name"]),
            },
        }
    },
});
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70213613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档