web-dev-qa-db-fra.com

Le client Apollo me donne une erreur de «le magasin contient déjà un identifiant» - qu'est-ce que cela signifie?

Dans un projet natif réactif, je crée un objet, puis je redirige l'écran vers la page de détails de l'objet nouvellement créé et j'obtiens cette erreur:

Possible rejet de promesse non gérée (id: 0): Erreur réseau: Erreur de magasin: l'application a tenté d'écrire un objet sans ID fourni mais le magasin contient déjà un ID de XYZ pour cet objet.

En regardant dans la base de données, je vois que l'élément est correctement créé à l'étape précédente. Naviguer vers le même écran et le même élément dans une liste (pas après une création et une redirection) semble fonctionner correctement. Dois-je attendre ou, d'une manière ou d'une autre, définir un calendrier pour que la boutique apollo reste correcte?

J'utilise le client apollo standard @graphql binding/wrapping

gql:

 query getEvent($eventId: ID!) {
    Event(id:$eventId) {
      id
      headline
      photo
      location
      startTime
      creator {
        username
        photo
      }
    }
  }
`;

Et voici un extrait de code

@graphql(getEventGql,{
  options: ({route}) => {
    console.log('route params', route.params);
    return {
      variables: {
        eventId: route.params.eventId,
      }
    }
  },
})

@connect((state) => ({ user: state.user }))
export default class EventDetailScreen extends Component {
...
35
MonkeyBonkey

Vous devez également ajouter id au champ creator:

query getEvent($eventId: ID!) {
    Event(id:$eventId) {
      id
      headline
      photo
      location
      startTime
      creator {
        id
        username
        photo
      }
    }
  }

En général, assurez-vous d'ajouter id à toutes les sous-sélections de vos requêtes.

64
marktani