我有以下突变:

export default class AddTaskMutation extends Relay.Mutation {
  static fragments = {
    classroom: () => Relay.QL`
      fragment on Classroom {
        id,
      }`,
  };

  getMutation() {
    return Relay.QL`mutation { addTask }`;
  }

  getFatQuery() {
    return Relay.QL`
      fragment on AddTaskPayload {
        classroom {
          taskList,
        },
        taskEdge,
      }
    `;
  }

  getConfigs() {
    let rangeBehaviors = {};
    let member_id = 'hasNewMessages(true) member_id(' + Global.fromGlobalId(this.props.createdByMember)['id'] + ')';
    rangeBehaviors[''] = 'append';
    rangeBehaviors['hasToDo(true)'] = 'append';
    rangeBehaviors['hasToDo(false)'] = 'append';
    rangeBehaviors['isStart(true)'] = 'ignore';
    rangeBehaviors['isStart(false)'] = 'append';
    rangeBehaviors[`${member_id}`] = 'append';
    rangeBehaviors['hasNewMessages(true) member_id(null)'] = 'ignore';
    return [
      {
        type: 'RANGE_ADD',
        parentName: 'classroom',
        parentID: this.props.classroomId,
        connectionName: 'taskList',
        edgeName: 'taskEdge',
        rangeBehaviors,
      }
    ];
  }

  getVariables() {
    return {
      title: this.props.title,
      instruction: this.props.instruction,
      start_date: this.props.start_date,
      end_date: this.props.end_date,
      is_archived: this.props.is_archived,
      is_published: this.props.is_published,
      is_preview: this.props.is_preview,
      productId: this.props.productId,
      classroomId: this.props.classroomId,
      createdByMember: this.props.createdByMember,
      subTasks: this.props.subTasks,
      students: this.props.students,
    };
  }
}


运行我的应用程序时,我收到以下2条警告:


  warning.js:44警告:RelayMutation:与ID taskList{hasNewMessages:true,member_id:null}对应的突变字段classroom上的连接Classroom:35与您的RANGE_ADD配置中指定的任何rangeBehaviors不匹配。这意味着整个连接将被重新提取。为该突变配置范围行为,以便仅获取新边缘并启用乐观突变,或使用refetch抑制此警告。





  warning.js:44警告:不建议将null用作rangeBehavior值。使用ignore避免重新获取范围。


由于其他rangeBehaviors工作,因此我假设在一种行为中声明2个变量时必须存在语法错误-在这种情况下为hasNewMessagesmemeber_id

我一直在寻找答案,但是找不到。该文档似乎也没有涵盖这种情况。

编辑:我也尝试了rangeBehaviors['hasNewMessages(true),member_id(null)'] = 'ignore';(逗号作为分隔符),但没有成功。

最佳答案

检查中继的源代码(文件RelayMutationQuery.js)后,我可以看到它在所有rangeBehaviors的数组中搜索的数组键。然后,我可以将代码更新为正确的格式。

由于我没有在网上找到有关这种极端情况的任何信息,因此我将在此处发布我的解决方案-也许将来有人会觉得有用。



rangeBehavior具有2个(或更多)变量时,需要用句点(.)分隔它们。另外,传递null时,您不会显式传递它-只需从其'变量中忽略它即可。

例如:

对:

rangeBehaviors['hasNewMessages(true).member_id()'] = 'ignore';


错误:

rangeBehaviors['hasNewMessages(true),member_id(null)'] = 'ignore';

07-28 11:45