小编Eri*_*tvl的帖子

使用 Apollo 的 writeFragment 更新嵌套列表

我正在开发一个应用程序,在该应用程序中可以使用方向舵和其他东西配置一艘船。数据库结构有点嵌套,到目前为止,我一直将 GraphQL 查询与数据库保持一致。

这意味着:我可以使用一些查询 ship(projectId, shipId) 获取一艘船,但我使用的是嵌套查询:

query {
    project(id:1) {
        id
        title
        ship(id:1) {
            id
            name
            rudders {
                id
                position
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样的结构当然会导致很多嵌套数组。例如,如果我刚刚添加了一个新方向舵,则必须使用 cache.readQuery 进行检索,它为我提供项目对象而不是方向舵列表。要将方向舵添加到缓存中,我会得到一条带有嵌套的、解构的对象的长行,这使得代码难以阅读。

所以我想到了使用 GraphQL 片段。在 Internet 上,我看到它们被大量使用以防止必须在大量对象上重新键入多个字段(我个人认为这也非常有用!)。然而,片段用于数组的例子并不多。

当将一些数据附加到嵌套在某些缓存查询中的数组时,数组的片段可以保存所有对象解构。使用 Apollo 的 readFragment 和 writeFragment,我设法让一些东西工作起来。

片段:

export const FRAGMENT_RUDDER_ARRAY = gql`
    fragment rudderArray on ShipObject {
        rudders {
            id
            position
        }
    }
`
Run Code Online (Sandbox Code Playgroud)

用于主船查询:

query {
    project(id: ...) {
        id
        title
        ship(id: ...) {
            id
            name
            ...rudderArray
        }
    }
}
${RUDDER_FRAGMENT_ARRAY}
Run Code Online (Sandbox Code Playgroud)

使用这个,我可以编写一个更清晰的 update() 函数来在突变后更新 Apollo 的缓存。见下文: …

javascript reactjs graphql react-apollo

8
推荐指数
0
解决办法
1424
查看次数

标签 统计

graphql ×1

javascript ×1

react-apollo ×1

reactjs ×1