React-relay 嵌套突变后未获取有效负载

2024-04-23

这是一个后续问题这个答案 https://stackoverflow.com/a/34776023/2030321早些时候在 SO 上发布了有关反应中继突变警告的文章。

“在这种情况下,您需要做的是将 FeatureLabelNameMutation getFragment 添加到您的 AddCampaignFeatureLabelMutation 查询中。”

与该问题中的OP一样,我也想进行嵌套的中继突变,并且我已经尝试按照@Christine的建议进行操作,但我不确定到底要在哪里放置getFragment part.

在我的应用程序中,我想在用户创建任务时创建一个具有多个嵌套“子任务”的“任务”。

我尝试过的方法有效,但我没有得到返回的 PayLoadAddSubTaskMutation突变。到目前为止,这是我尝试过的:

AddTaskMutation.js

export default class AddTaskMutation extends Relay.Mutation {
  static fragments = {
    classroom: () => Relay.QL`
      fragment on Classroom { 
        id,
        tasks(last: 1000) {
          edges {
            node {
                id,
                ${AddSubTaskMutation.getFragment('task')}, //<-- what I tried adding 
            },
          }
        },
      }`,
    }`,
  };
  ...

AddSubTaskMutation.js

export default class AddSubTaskMutation extends Relay.Mutation {
  static fragments = {
    task: () => Relay.QL`
      fragment on Task { 
        id,
      }`,
   };
   ...

任务创建.js

Relay.Store.update(
  new AddTaskMutation({
    title,
    instruction,
    start_date,
    end_date,
    published: isPublished,
    classroom: this.props.classroom
  }),
  {
    onSuccess: (response) => {
      let {taskEdge} = response.addTask;
      for (let subTask of this.state.subTaskContent) {
        Relay.Store.update(
          new AddSubTaskMutation({
            task: taskEdge.node,
            type: subTask['type'],
            position: subTask['position'],
            ...
          }),
        );
      }
    }
  }
)
...
export default Relay.createContainer(TaskCreate, {
  prepareVariables() {
    return {
      limit: Number.MAX_SAFE_INTEGER || 9007199254740991,
    };
  },
  fragments: {
    classroom: () => Relay.QL`
      fragment on Classroom {
        id,
        tasks(last: $limit) {
          edges {
            node {
              id,
              ...
            }   
          }
        },
        ...
        ${AddTaskMutation.getFragment('classroom')},
      }
    `,
  },
});

除了没有获得有效负载之外,我还收到以下警告:

Warning: RelayMutation: Expected prop `task` supplied to `AddSubTaskMutation` to be data fetched by Relay. This is likely an error unless you are purposely passing in mock data that conforms to the shape of this mutation's fragment.
Warning: writeRelayUpdatePayload(): Expected response payload to include the newly created edge `subTaskEdge` and its `node` field. Did you forget to update the `RANGE_ADD` mutation config?

所以我的问题是:我在哪里添加getFragment in AddTaskMutation.js使这项工作有效?


据我所知,问题是您并不真正理解突变“片段”与其余突变属性(胖查询和配置)的用途。您看到的警告与 Relay 有关,它注意到您给出的任务道具不是来自AddSubtaskMutation片段,它来自AddTaskMutation突变查询。但这实际上只是转移注意力。您的问题是您根本不需要这些片段,您只需要适当配置突变即可创建新的节点和边。这里有一些建议。

Step #1

  • 去掉两者中的碎片AddTaskMutation and AddSubtaskMutation,它们似乎没有必要
  • Modify AddTaskMutation的构造函数为任务获取一堆字段和一个classroomID指定受影响的教室
  • 同样,修改AddSubTaskMutation为子任务获取一堆字段和taskID指定父任务
  • 确保您的AddTaskMutation有效负载包括修改后的教室和新的任务边缘
  • 定义一个RANGE_ADD突变使用classroomID为课堂设定新任务目标
  • 定义一个FIELDS_CHANGE突变AddSubtaskMutation使用给定的改变父级taskID(我不确定你如何存储子任务,可能是一个连接)。您可以将其更改为RANGE_ADD如果你真的想要的话。

步骤#2:简化

  • 当你似乎一开始就掌握了所有信息时,似乎没有必要在 1+N 个突变(N 个子任务)中执行此操作。我会修改输入AddTaskMutation接受一个新任务和一系列子任务,并一次完成所有任务......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React-relay 嵌套突变后未获取有效负载 的相关文章

随机推荐

  • 2个JS函数同名冲突

    Short 在同一页面使用 2 个库 jQuery UI 和 Twitter Bootstrap jQuery UI 对我来说非常重要 因为几乎所有的 UI 东西都是基于它构建的 Twitter Bootstrap 仅适用于带下拉菜单的拆分
  • 如何通过拖动扩展窗口框架来使 WPF 窗口可移动?

    在 Windows 资源管理器和 Internet Explorer 等应用程序中 人们可以抓住标题栏下方的扩展框架区域并拖动窗口 对于 WinForms 应用程序 窗体和控件尽可能接近本机 Win32 API 一个人会简单地覆盖WndPr
  • 总和投影和结果约束

    我在数据库中有 100 个实体 我想获取前 20 个实体的某些属性的总和 Criteria cr getSession createCriteria Entity class cr setFirstResult 0 cr setMaxRes
  • ggplot 中的躲避/替换/排斥轴刻度标签?

    如果没有大量工作 我想要的可能是不可能的 但也许有人有解决方案 我有一个如下图 当然这是一个过于简单的示例 其中我的刻度标签彼此非常接近 dd lt data frame x 1 4 y c 10 10 5 10 6 10 7 z LETT
  • python 如何在嵌套列表中搜索项目

    假设我有这个清单 li 0 20 ar 20 40 asdasd 50 199 bar 24 69 sarkozy 现在 忘掉数字吧 它们让我能够识别字符串的位置 所以基本上 鉴于我手头有字符串 ar 我如何提取包含 ar 的所有列表 ne
  • 将 MATLAB 单元格类型转换为 C++

    我正在使用 C 转换 MATLAB 程序犰狳 http arma sourceforge net docs html syntax对于矩阵代数 我被困住了cell http blogs mathworks com loren 2006 06
  • wxGrid 在右侧显示大的空白边框

    默认情况下 wxGrid 在最后一列之后的右侧显示一个小的 10 像素 空白边框 调用 SetMargins 对其没有任何影响 这很烦人 但我可以忍受 但是 如果我将行标签宽度设置为零 则空白边框会变得更大 如果我只有一列 效果会很糟糕 看
  • 送达收据请求不适用于 XMPP Android (aSmack)

    我正在使用 OpenFire 和 aSmack 我似乎无法让 送货收据 正常工作 创建连接时我执行以下操作 create connection connection login username password DeliveryRecei
  • c++ 打开文件的问题

    必须是一个简单的答案 但我不知所措 这是返回错误的代码 我尝试过带或不带起始斜杠 我不知道完整路径 我希望它是相对于exe的 这就是相对路径 我试图逃避斜线 我的问题是当文件存在时我收到 打开文件时出错 为什么它失败了 ifstream m
  • 如何编写恒定时间函数将最高有效位复制到所有位

    我想用 C 语言编写一个函数 它采用以下的 MSBuint8 t 如果已设置 则返回0xFF如果不0x00 简而言之 它返回一个整数 其中所有位都设置为与 MSB 相同的值 但我想以完全恒定的时间方式来完成它 没有分支 没有数组偏移 只是数
  • jq - 过滤器数组不包含

    我正在使用应用程序 jq 从命令行过滤 json 文件 https stedolan github io jq https stedolan github io jq 这是一个代表问题的糟糕例子 如何过滤该集合以包含所有非红色或非圆形的水果
  • 如何循环遍历文件来获取数据?

    我正在尝试进行基本登录并注册 C 控制台应用程序 但是 我需要循环遍历我的文件以查看用户输入的用户名和密码在登录时是否匹配 如果用户输入用户名和密码 我希望我的代码遍历我的文件以检查它是否是现有的用户名和密码 这是我的代码 Serializ
  • Pandas:将列转换为列表

    我有一个数据框 date member id val 2016 06 01 2377264 14 2016 06 01 289719 6 2016 06 02 289719 12 2016 06 02 2377264 1 2016 06 0
  • 如何更改 ng-repeat 中单个元素的 ng-click 行为?

    我正在重构一个用角度编写的表格 目前 ng repeat 用于创建多个表行 其中任何行在单击时都会重定向到给定的 ui sref tbody tr class tablebox content td class name user name
  • JAVA JNI C 调试器

    是否有任何调试器可以帮助调试 Java JNI 程序以及 C 库 我应该能够在Java中从static void main开始调试程序 并继续调试并在本机c函数中放置断点 然后在控制权从C转移到Java后继续在Java中调试 Java 虚拟
  • 在运行时执行 C# 或 VB.NET 代码

    最近在 Codility com 上花了一些时间 我突然想到了这个问题 它们如何执行您创建的代码 特别是与 C 和 VB NET 有关的代码 我基本上想知道的是 如何在表单上的文本框中输入一些代码 然后运行该代码 如果没有第三方工具 这可能
  • 为 Windows 开发计划任务

    我必须使用 C net 开发一个必须每天运行一次的应用程序 它最多只运行一分钟 因此开发 Windows 服务有点大材小用 计划任务是合适的方法 但是 我对应用程序如何传达其结果有一些疑问 如何向任务调度程序指示任务失败 这是通过程序的退出
  • 查找包含“inf”或“nan”的项目的索引

    以下是一个示例1 item在我的清单中 array 1 2 3 43 83 92 12 54 93 23 94 83 23 inf inf inf inf inf 83 33 33 83 13 83 83 nan 83 73 43 43 4
  • 如何避免实体框架 TPT 继承中的多态行为,以便有效地查询基类型

    Overview 我首先使用实体 框架 4 3 代码和流畅的界面来设置我的 DbContext 我有一个基地Item具有继承此类型的其他类型的类 例如Event BlogPost 论坛主题 WikiPage等等 这些继承的类型与我认为实体框
  • React-relay 嵌套突变后未获取有效负载

    这是一个后续问题这个答案 https stackoverflow com a 34776023 2030321早些时候在 SO 上发布了有关反应中继突变警告的文章 在这种情况下 您需要做的是将 FeatureLabelNameMutatio