Запись вложенного объекта в кеш клиента Apollo - PullRequest
1 голос
/ 07 марта 2019

Я пытаюсь записать вложенный объект в кеш apollo, но он не работает. Простые записи переменных работают нормально. Я использую Apollo-клиент v2.4

// Schema
const GET_DATA_FROM_CACHE = gql `
  name
  address
  age
`
// Reading data from cache
  render() {
    return (
    <Query query = {GET_DATA_FROM_CACHE} fetchPolicy = {"cache-only"}>
      {({ data }) => (
        <View >
          <Text> Name: {data.name} </Text>
        </View>
      )}
    </Query>
   )
  }
// THIS WORKS as I can see the name in my Text field

client.writeData({
  data: {
    name: 'mr x',
    age: 25
  }
})
// THROWS ERROR: "cannot read property country of undefined"

client.writeData({
  data: {
    name: 'mr x',
    address: {
      country: 'y',
      city: 'z'
    },
    age: 25
  }
})

1 Ответ

1 голос
/ 07 марта 2019

Я столкнулся с этой проблемой и решил ее, убедившись, что включил поле __typename с соответствующим значением во вложенный объект.Например:

client.writeData({
  data: {
    name: 'mr x',
    address: {
      id: 1,
      country: 'y',
      city: 'z',
      __typename: "Address"
    },
    age: 25
  }
})

Я бы также добавил, что было бы неплохо добавить поле 'id' (если вы не настроили параметр getIdFromObject).В разделе Нормализация кэша Apollo есть дополнительная информация .

. Для справки я получил ошибку:

Инвариантное нарушение: Ошибка хранилища: приложение попыталосьнаписать объект без предоставленного идентификатора, но хранилище уже содержит идентификатор {Typename}: {id} для этого объекта.

...