2016-07-22 2 views
0

Ниже приведен мой код для добавления и удаления человека из группы.getOptimisticResponse не работает для полей с аргументами

По этой причине 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, 
     }, 
    }; 
    } 
} 

ответ

0

Я хотел бы попробовать добавив groupId оптимистическому ответ первым. По моему опыту, оптимистичный ответ должен точно соответствовать форме жирного запроса.

Если у вас нет идентификатора группы во время генерирования оптимистического ответа, вы можете попробовать заменить временные значения до тех пор, пока ответ не будет возвращен с сервера. Этот сценарий часто возникает, когда вы выполняете соединение и предоставляете ключи к виду, чтобы отличать повторяющиеся элементы React.

Смежные вопросы