getOptimisticResponse 不适用于带参数的字段

Posted

技术标签:

【中文标题】getOptimisticResponse 不适用于带参数的字段【英文标题】:getOptimisticResponse is not working for fields with arguments 【发布时间】:2016-11-26 04:27:06 【问题描述】:

以下是我在群组中添加和删除人员的代码。

由于某种原因,getOptimisticResponse 不适用于此突变。

这可能是因为 groupId 字段有一个参数 isInGroup 吗?

class GroupAddRemovePersonMutation extends Relay.Mutation 
  static initialVariables = 
    groupId: null,
  

  static prepareVariables(prevVars) 
    return prevVars;
  

  static fragments = 
    person: () => Relay.QL`
      fragment on Person 
        id
        isInGroup(groupId: $groupId)
      
    `,
  

  getMutation() 
    return this.props.isInGroup ?
      Relay.QL`mutation  groupRemovePerson ` :
      Relay.QL`mutation  groupAddPerson `;
  

  getVariables() 
    const groupId, person = this.props;
    return 
      personId: person.id,
      groupId,
    ;
  

  getCollisionKey() 
    const groupId, person = this.props;
    return `groupPerson_$groupId_$person.id`;
  

  getFatQuery() 
    const groupId, person, isInGroup = this.props;
    return isInGroup ?
      Relay.QL`
        fragment on GroupRemovePersonMutationPayload 
          person 
            id
            groups  id 
            isInGroup(groupId: "$groupId")
          
          group 
            id
            person
            hasPerson(personId: "$person.id")
          
        
      ` :
      Relay.QL`
        fragment on GroupAddPersonMutationPayload 
          person 
            id
            groups  id 
            isInGroup(groupId: "$groupId")
          
          group 
            id
            person
            hasPerson(personId: "$person.id")
          
        
      `;
  

  getConfigs() 
    const groupId, person = this.props;
    return [
      type: 'FIELDS_CHANGE',
      fieldIDs: 
        person: person.id,
        group: groupId,
      ,
    ];
  

  getOptimisticResponse() 
    const groupId, person, isInGroup = this.props;
    return 
      person: 
        id: person.id,
        isInGroup: !isInGroup,
      ,
      group: 
        id: groupId,
        hasPerson: !isInGroup,
      ,
    ;
  

【问题讨论】:

【参考方案1】:

我会先尝试将groupId 添加到乐观响应中。根据我的经验,乐观响应必须与胖查询的形状完全匹配。

如果您在生成乐观响应时没有 groupIds,您可以尝试替换临时值,直到从服务器返回响应。当您渲染连接并为视图提供键以区分重复的 React 元素时,通常会发生这种情况。

【讨论】:

以上是关于getOptimisticResponse 不适用于带参数的字段的主要内容,如果未能解决你的问题,请参考以下文章

为啥元类适用于类属性但@classmethod @property 不适用?

JavaScript 箭头函数:适用与不适用场景

WEKA:如何区分“缺失”和“不适用”的数字数据?

为啥 NSRegularExpression 不包含在适用于 Mac 应用程序的foundtion.framework 中,因为它适用于 iOS?

Nginx websocket 将适用于单个响应或根本不适用,似乎是随机的

mongodb适用和不适用的应用场景