Получение `Store error: приложение попыталось записать объект без предоставленного typename, но хранилище уже содержит объект с typename`

Я получаю Store Error при обновлении, и я новичок в apollo и graphQL, поэтому не могу понять, что я делаю неправильно. Я пытаюсь обновить имя и фамилию человека. Этот объект является вложенным, и я передаю typeName как объект обернутого объекта. Если кто-то понимает это и может предложить, пожалуйста, дайте мне знать

Вот как это выглядит в Apollo:

ValidationType: возраст @ EmpId

persondetails: personDetailsType

первый: "abc"
empId: 10002
возраст: "21"
последний: "def"

Значения передаются отсюда:

 <Button content="Save"
              onClick={(_, {value}) => {
                this.props.mutation({
                  variables: {
                    persondetails: {
                      first: this.state.first,
                      last: this.state.last,
                      empId: empId,
                      age: age
                    },
                      age,
                      empId,
                  }
                });
              }}
            />

Мой запрос на обновление выглядит примерно так:

updatePersonDetails: (
      _,
      {persondetails, age, empId},
      {cache}
    ) => {
      cache.writeFragment({
        id: `validationType:${age}!${empId}`,
        fragment: gql`
          fragment updatePersonDetails on validationType {
            persondetails {
              first
              last
              age
              empId
              __typename

            }
            __typename
          }
        `,
        data: {
          persondetails: persondetails,
          age,
          empId,
          __typename: 'validationType'
        }
      });

Я получаю ниже ошибку при обновлении:

[Network error]: Error: Error writing result to store for query:
 {
  ...updatePersonDetails
}

fragment persondetails on validationType {
  persondetails {
   first
   last
   age
   empId
    __typename
  }
  __typename
}

Store error: the application attempted to write an object with no provided typename but the store already contains an object with typename of personDetailsType for the object of id $validationType!21.1002. The selectionSet that was trying to be written is:
persondetails {
 first
 last
 age
 empId
  __typename
}

0 ответов

Я передавал объект неправильно в резольверах при передаче обновления. А также мне не хватало typeName в этом объекте. Правильный синтаксис был:

updatePersonDetails: (
      _,
      {persondetails, age, empId},
      {cache}
    ) => {
      cache.writeFragment({
        id: `validationType:${age}!${empId}`,
        fragment: gql`
          fragment updatePersonDetails on validationType {
            persondetails {
              first
              last
              age
              empId
              __typename

            }
            __typename
          }
        `,
        data: {
          persondetails: {
           ...persondetails,
           __typename: 'persondetailsType'
}
          __typename: 'validationType'
        }
      });
Другие вопросы по тегам