connection - 将边缘插入中继连接的正确方法是什么?
问题描述
我在中继 paginationContainer 组件中订阅了新记录。当它从后端检索新记录时,我以这种方式将其插入连接中(在updater
选项中requestSubscription
):
const newEdge = ConnectionHandler.createEdge(
store,
connection,
newPostNode,
'posts'
)
ConnectionHandler.insertEdgeBefore(connection, newEdge)
当我看到一个新的插入边缘时,它可以正常工作console.log(props.posts.edges)
。然而,正如我所料cursor
,这个新插入边缘的参数是undefined
它的node
参数本身就是一个记录。
我认为这是不正确的,因为连接中的每个边都必须有一个cursor
.
将新边缘插入中继连接以使其包含 的正确方法是cursor
什么?
解决方案
每条边都必须有一个游标,通常应该由服务器提供。这意味着返回可能是边缘一部分的节点的订阅或突变也应该提供游标。
有两种主要方法。如果只能以一种方式对连接进行排序(从而保证同一节点始终具有相同的光标),则可以只返回整个边类型:
type PostEdge {
node: Post!
cursor: String!
}
type MyMutationPayload {
edge: PostEdge!
}
type Mutation {
newPost(input: NewPostInput!): MyMutationPayload!
}
如果可以以多种方式对连接进行排序(例如按标题、出版日期、作者),则光标因排序选项而异,这意味着您不能返回边本身,但您可以返回必要的信息来构建客户端更新程序中的边缘:
enum PostSort {
NEWEST_FIRST
AUTHOR_AZ
TITLE_AZ
}
type PostCursors {
sortKey: PostSort!
cursor: String!
}
type MyMutationPayload {
node: Post!
cursors: [PostCursors!]!
}
type Mutation {
newPost(input: NewPostInput!): MyMutationPayload!
}
推荐阅读
- python - 如何将 1 个数组的数据从现有的 2D 数组传输到新函数?
- javascript - 如何在 $.get 返回值之前停止代码运行?
- android - (FRIDA) 生成失败:在准备应用启动时无法访问 zygote64;尝试禁用 Magisk Hide 以防它处于活动状态
- javascript - How to detect if CSS @font-face is NOT used on a page?
- javascript - 如何让 Flask 为我的 .js 文件提供服务?
- flutter - 任何人都可以帮助我在颤动中对齐布局吗?
- javascript - ThreeJS Animate Object3D.lookAt 奇怪
- html - 从我的联系人页面导航到我的主页时弹出错误 404
- json - Typescript - 从带有日期字符串的 Json 字符串自动转换为带有 Date 属性的对象
- python - 尝试从其他 python 函数获取变量以使用 tkinter 按钮命令