在 Relay.js 中,啥是 `Client Mutation Identifier`?

Posted

技术标签:

【中文标题】在 Relay.js 中,啥是 `Client Mutation Identifier`?【英文标题】:In Relay.js, what is the `Client Mutation Identifier`?在 Relay.js 中,什么是 `Client Mutation Identifier`? 【发布时间】:2020-06-08 20:39:57 【问题描述】:

在中继文档here 中,它说:

Relay 使用一种通用的突变模式,其中突变类型的根字段具有单个参数、输入,并且输入和输出都包含用于协调请求的客户端突变标识符和回应。

但在他们提供的示例中,输入和输出分别如下所示:

// IntroducedShipInput

  "input": 
    "shipName": "B-Wing",
    "factionId": "1"
  


// IntroducedShipPayload

  "introduceShip": 
    "ship": 
      "id": "U2hpcDo5",
      "name": "B-Wing"
    ,
    "faction": 
      "name": "Alliance to Restore the Republic"
    
  

那么client mutation 标识符是什么?为什么以及如何使用它来协调请求和响应?

【问题讨论】:

在执行突变时,他们使用唯一标识符名称 clientMutationId @MayankPandav 你能详细说明一下谁在使用唯一标识符名称吗? i.postimg.cc/pdLv4GjY/Screenshot-from-2020-03-03-09-39-36.png 请结账,它会自动获取其价值,甚至与他们过去使用的一样 【参考方案1】:

我仍然不能 100% 确定“客户端突变标识符”到底发生了什么,但经过一些研究,它似乎是 Relay 以前版本的要求。 This PR apparently removed the requirement 用其他机制替换它,但我不清楚其他机制的作用。 I left a comment requesting more clarification around the documentation,好像已经过时了。

无论如何,客户端突变标识符appears to have been related to some assumptions about mutation idempotency in Facebook's implementation of GraphQL。

【讨论】:

以上是关于在 Relay.js 中,啥是 `Client Mutation Identifier`?的主要内容,如果未能解决你的问题,请参考以下文章

React-native + Relay.js 的稳定构建

Relay.js 中的根查询创建和删除

如何通过 createContainer(如流星.js 或 relay.js)传递 react.js 数据

使用 RelayRouter 导航 relay.js 应用程序抛出 Invalid State Change 错误

Relay.js 没有正确解析组合片段

@relay 的目的(模式:真)