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

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

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

validationType: age @ empId

persondetails: personDetailsType

first: "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
}

1 Ответ

0 голосов
/ 05 марта 2019

Мой объект был объявлен неверно в резольверах при передаче обновления.А также мне не хватало 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'
        }
      });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...