首页 > 解决方案 > 我应该使用什么来代替解析器?

问题描述

正如您已经知道,本地解析器已被弃用,因此我们不能将其用作处理 REST 缓存的透视方式。我们应该使用什么来代替解析器?“现场政策”对此根本没有好处。让我们想象一下……您有两个不同的客户端查询:getBooks 和 getBook。每个查询都从其余 API 获取数据。当我们已经从 getBooks 获取数据并运行另一个查询 getBook 时,我们需要以某种方式处理这种情况。getBook 不应发出请求,因为数据已被缓存。在它被弃用之前,我们在解析器中这样做了。我们只是检查缓存,如果没有请求,则返回缓存中已经存在的数据。在目前的情况下,我们该如何处理?

标签: apolloapollo-client

解决方案


对不起,但这有点不是我的意思。这是一个代码示例:

export const getBooks = gql`
    query getBooks () {
        getBooks ()
            @rest(
                type: "Book"
                path: "books"
                endpoint: "v1"
            ) {
            id
            title
            author
        }
    }
`

export const getBook = gql`
    query getBook ($id: Int!) {
        getBook (id: $id)
            @rest(
                type: "Book"
                path: "book/{args.id}"
                endpoint: "v1"
            ) {
            id
            title
            author
        }
    }
`

所以我们有两个不同的查询。目标是当我们轮流运行 getBook 时,不应该发出 REST 请求,因为我们已经在缓存中拥有相同的数据,因为我们是从 getBooks 获取的。在不推荐使用解析器之前,我们在解析器中处理它。喜欢:如果缓存中不存在此 ID,只需发出请求(如果存在),将缓存中的数据提供给我。我们现在怎么能做到这一点?

如您所见, fetchPolicy 完全不同。本地字段也不好,因为它是关于字段而不是整个实体的东西。


推荐阅读