2017-08-16 62 views
1

我試圖使用update:在執行突變後更新查詢。問題是,商店中的查詢有幾個不同的變量應用,我想更新查詢並返回相同的變量。Apollo無法在更新中訪問queryVariables:突變後

我在文檔中發現updateQueries有一個選項來包含查詢變量,這是最後執行查詢的一組變量。

我還沒有找到任何描述如何從更新內部檢索queryVariables或類似的東西。

內更新:我可以用

lastQuery = Object.keys(store.data.ROOT_QUERY).slice(-1)[0] 

將返回像"userRecipes({"first":20,"minTime":0,"maxTime":500,"filterType":"Explore","searchTerm":""})"

的哈克的方式,我現在正在做的這個就是解析字符串中拉出的變量,所以我的結果終於可以用readQuery像這樣:

 const lastQuery = Object.keys(store.data.ROOT_QUERY).slice(-1)[0] 
     const searchPosition = lastQuery.search("searchTerm") 
     const searchTerm = lastQuery.slice((searchPosition + 13),-3) 

     // also parsing the lastQuery string for filterType, minTime, maxTime 

     const data = store.readQuery({ 
     query: QUERY_USER_RECIPES, 
     variables: { 
       filterType: filterType, 
       searchTerm: searchTerm, 
       minTime: minTime, 
       maxTime: maxTime, 
     } 
     }); 

這不可能做到這一點的最好辦法。有更簡單的方式來訪問更新內的變量嗎?

似乎應該有一種方法來讀取存儲中的現有查詢和變量,而不用readQuery傳遞變量。

感謝您看看這個問題!

版本

[email protected] [email protected]

回答

0

阿波羅2,而應該在1.x中

In the docs相同,你會發現你也可以將變量傳遞給readQuery。

下面是一個例子,用戶可以預訂點擊BookEvent組件的事件,如果突變成功,它會自動反映在上面的組件EventDetail中。

在這種跳跳虎突變(BookEvent),我通過storeeventId在上部件(EventDetail)聲明的函數,並通過子組件的道具通過組件:

const onClick =() => createEventTicketMutation({ 
    variables: { eventId: event.id }, 
    update: (store, { data: { createEventTicket } }) => { 
    updateStoreAfterBooking(store, event.id) 
    }, 
}) 

這裏是功能,在所述上部部件執行高速緩存更新:

const updateCacheAfterBooking = (store, eventId) => { 
    const data = store.readQuery({ 
    query: EVENT_DETAIL_QUERY, 
    variables: { id: eventId }, 
    }) 
    data.eventDetail.bookings += 1 
    store.writeQuery({ 
    query: EVENT_DETAIL_QUERY, 
    variables: { id: eventId }, 
    data, 
    }) 
} 

它被傳遞像這樣<BookEvent updateStoreAfterBooking={updateCacheAfterBooking} ... />

不要忘記還要將所需的變量傳遞給writeQuery。