2017-01-30 18 views
13

W reagować rodzimej projektu tworzę obiekt, a następnie przekierowanie do ekranu do nowo utworzonego obiektu stronie szczegółów i dostaję ten błąd:Klient Apollo podaje mi błąd "Sklep już zawiera identyfikator" - co to znaczy?

Możliwa Unhandled Obietnica odrzuceniu (ID: 0): Błąd sieci: Błąd przechowywania: aplikacja próbowała zapisać obiekt bez podanego identyfikatora, ale magazyn zawiera już identyfikator XYZ dla tego obiektu.

Patrząc w bazie danych widzę, że element został poprawnie utworzony w poprzednim kroku. Przejście do tego samego ekranu i elementu na liście (nie po utworzeniu i przekierowaniu) wydaje się działać dobrze. Czy muszę czekać lub w jakiś sposób ustawić czas, aby sklep apollo pozostał poprawny?

używam standardowego klienta apollo @graphql wiążący/owijania

gql:

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

A oto fragment kodu

@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 { 
... 

Odpowiedz

21

Trzeba dodać id również do creator:

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

Miał ten błąd, gdy nie było potrzeby identyfikatora w zagnieżdżonej właściwości, ale potrzebował identyfikatora na poziomie katalogu głównego, więc ta odpowiedź była pomocna. Byłbym wdzięczny za wyjaśnienie, dlaczego. –

+0

@ ABCD.ca Nie jestem w 100% pewny, ale wydaje się, że niektóre buforowanie wyników trwa, więc musisz podać unikalny identyfikator klienta apollo, aby go pobrać. Ma sens, ale nie miałem tego problemu przed wydaniem wersji 1.0.0, więc tymczasowo zmieniono na 0.10.1 – ViggoV