我在理解 Relay 中胖查询的概念时仍然有些麻烦,尤其是关于确定要重新获取哪些数据的交集逻辑部分。
到目前为止,我已经构建了一个简单的分层数据结构,它带有一个UserType
作为根查询(名为viewer
),它有许多projects
(类型ProjectConnectionType
)与之关联。每个项目都有另一个projects
字段(也是 type ProjectConnectionType
)来模拟任意嵌套的子项目层次结构。
我还有两个更高阶的 React 组件ProjectList
,并ProjectListItem
通过有条件地扩展片段(通过expanded
在我的列表项组件中使用 Relay 变量)来呈现这个结构。
到目前为止,这工作正常,我对此非常满意。棘手的部分现在是AddProject
突变。我创建了一个突变,它采用名称和parentProjectId
作为输入(对于根项目可能为空),并在服务器端的正确位置创建一个新节点。之后,它应该返回新的projectEdges
(RANGE_ADD
之后使用),以及parentProject
orviewer
以便我也可以在subprojectCount
那里更新。
对于查看器(唯一的全局根查询点),一切正常。Relay 正确计算交集并从服务器请求新数据。但是当我尝试添加一个子项目时,我一直得到一个完全空的响应,没有任何输出字段(除了突变 id)。我的猜测是,Relay 似乎因为不知道如何相应地映射该parentProject
字段而弄错了交叉点。我已经尝试为其添加FIELDS_CHANGE
配置以及parentProject: node(id: "$parentProjectId")
在我的胖查询中进行查询(这也不起作用)。
我错过了什么?我现在已经阅读了几次文档,但我仍然不理解突变的概念,我觉得已经很愚蠢了。