在graphql/relay中维护有序列表
问题描述:
我想按特定顺序显示任务列表。问题是,用户应该能够更改订单并将其保存到graphql中(用户还可以添加和删除列表中的任务)。目前我们已经实现了列表作为中继连接和添加/删除/更新工作正常。以下是我们现在正在考虑的内容:在graphql/relay中维护有序列表
- 使graphql返回一个有序列表。然后将该列表复制到组件中的本地状态,并在那里重新排列列表。然后通知graphql有关更改。
- 使graphql在所有排序顺序上返回一个数字。
- 使graphql返回一个链表。所以每个任务都有对列表中下一个的引用。
正如我所看到的,这些都有一些问题。使用有序列表并将其复制到本地状态,我们必须以某种方式处理添加/删除操作,并相应地更新本地状态。
使用数字排序顺序,如果我们使用运行数字,例如1..2..3 ..,当我们想要在数字1和2之间移动数字200时,我们必须更新许多数字。这看起来像很多更新,我不知道这是如何处理的继电器/ graphql。
随着链接列表中还有很多记录涉及改变顺序,我不知道这是如何处理接力突变。也许从变异中返回3个任务(所有将指针更改为列表中下一个的任务)并在“FIELDS_CHANGE”配置中指定?
这是使用relay/graphql/react时的最佳解决方案吗?其他解决方案非常受欢迎。
答
我们走下路径创建一个单独的突变对于相对移动的项目到另一个问题:
- 一般
get
查询返回的有序列表没有任何order
键或此类 - 将某个项目由
moveBefore
或moveAfter
变异完成,返回新排序的列表。参数是新的itemToMove
和relativeTarget
。
的突变签名大致是这样的:
moveAfter(itemToMove: ID!, itemToMoveAfter: ID!): Item[]
将某个项目的另一项目具有相同的签名&行为之前,就在服务器端逻辑是有点不同。
因为我们没有使用中继,所以我不能评论如何让中继知道这些变化。