6

Oluşturma veya güncelleme sırasında tetiklenen bir yükselme sorgum var. Güncellemede, Apollo sonucu önbelleğe entegre eder, ancak oluşturmadan yaratır. İşte Apollo İstemcisi: Upsert mutasyonu yalnızca güncelleme sırasında önbelleği değiştirir, ancak oluşturulmuyor

sorgusu:

export const UPSERT_NOTE_MUTATION = gql` 
    mutation upsertNote($id: ID, $body: String) { 
    upsertNote(id: $id, body: $body) { 
     id 
     body 
    } 
    }` 

Müvekkilim:

const graphqlClient = new ApolloClient({ 
    networkInterface, 
    reduxRootSelector: 'apiStore', 
    dataIdFromObject: ({ id }) => id 
}); 

sunucudan yanıt aynıdır: Her iki id ve body döndürülür fakat Apollo yeni kimlikleri taşımıyorsa data önbellek nesnesini otomatik olarak.

Apollo'nun, daha sonraki bir getirmeyi tetiklemeden data'a yeni Nesneleri otomatik olarak eklemesi mümkün mü? İşte

gibi benim veri deposu görünür: enter image description here

GÜNCELLEME

belgelerine göre, fonksiyon updateQueries bana listeye yeni bir unsur itmesine izin gerekiyordu Özkaynaklarıma tekrar sorgulama yapmak zorunda kalmadan varlıkların tekrarı.

Bu işlev çalıştırılır, ancak işlev tarafından döndürülen her şey tamamen yok sayılır ve önbellek değiştirilmez.

Böyle bir şey yapsalar bile:

updateQueries: { 
     getUserAssets: (previousQueryResult, { mutationResult }) => { 
     return {}; 
     } 
    } 

Hiçbir şey değiştirir.

GÜNCELLEME 2.

Hala benim varlıklar listesine güncellemek için alınamıyor. updateQueries İçinde

, işte previousQueryResult neye benzediği:

updateQueries: { 
     getUserAssets: (previousQueryResult, { mutationResult }) => { 
     return { 
      assets: [] 
      .concat(mutationResult.data.upsertAsset) 
      .concat(previousQueryResult.assets) 
     } 
     } 
    } 

Ama ne olursa olsun ben dönmek ne, veri deposu yenilemez: Referans olarak

enter image description here

, burada her biri asset'un neye benzediği:

enter image description here

cevap

0

Güncelleştirmenizde bildirdiğiniz gibi, bu mutasyonla ilişkili sorguları güncellemek için updateQueries'u kullanmanız gerekir. kimliğine sahip şu anda sistem içinde notların listesini dönmelidir

query myMadeUpQuery { 
    note { 
    id 
    body 
    } 
} 

: Sorunuz sorgusunun tür mutasyon sonucu ile haberdar olmak için ne ifade etmese de, ben böyle bir şey var galiba ve notların her birinin gövdesi.updateQueries ile, geri arama sorgusunun sonucunu (yani yeni eklenen nota hakkında bilgi) ve bu sorgunun önceki sonucunu (yani notların bir listesini) alır ve geri çağrınız sorguya atanması gereken yeni sonucu döndürmelidir. yukarıdaki.

Benzer bir örnek için here adresine bakın.

updateQueries: { 
    myMadeUpQuery: (previousQueryResult, { mutationResult }) => { 
    return { 
     note: previousQueryResult.note(mutationResult.data.upsertNode), 
    }; 
    } 
} 
+0

üzgünüm. Sadece güncellemem # 2 ile sorumu güncelliyorum. Yine de maalesef düzgün çalışması için bunu alamıyorum. Cevabınız için –

1

Eğer örnek here takip ettiniz şu şekildedir: Esasen, verilen örnek kullandığı immutability-helper olmadan, kendi updateQueries geri arama yazabilirim? Böyle mutasyona içinde updateQueries yazarsınız:

updateQueries: { 
    getUserAssets: (previousQueryResult, { mutationResult }) => { 
    const newAsset = mutationResult.data.upsertAsset; 
    return update(prev, { 
     assets: { 
     $unshift: [newAsset], 
     }, 
    }); 
    }, 
} 

Veya değişmezlik-yardımcı nesne assign yerine güncelleme ile: geç cevap Dhaivat için

updateQueries: { 
    getUserAssets: (previousQueryResult, { mutationResult }) => { 
    const newAsset = mutationResult.data.upsertAsset; 
    return Object.assign({}, prev, {assets: [...previousQueryResult.assets, newAsset]}); 
    }, 
} 
+0

teşekkürler. Her iki tavsiyeni de denedim ve çalışmıyorlar. Şanssız bir şekilde göndermiş olduğunuz bağlantıyı da takip ettim. Neler oluyor, başarılı bir grafik istemi başarılı bir şekilde yapılır, ancak yeni oluşturulan varlık sayfayı yenileyene kadar varlıklar listesine eklenmez. Bu kesinlikle akıl almaz. –

İlgili konular