當使用 Vue Apollo Composition API,許多開發者可能會發現當相同的查詢在兩個不同的組件中使用時,onResult
只會被呼叫一次。這可能會造成一些困惑,特別是當你希望在每個組件中都對查詢結果進行特定的處理時。本文將深入探討這個問題的原因,以及提供一些建議的解決策略。
Apollo Client 內部使用了一個強大的快取機制。當同一個查詢被呼叫多次時,為了效能考量,Apollo Client 會嘗試從快取中檢索該查詢的結果,而不是重新向 GraphQL 伺服器發出查詢請求。因此,當兩個組件都使用同一個查詢時,第二個組件將從快取中獲取結果,而不會觸發新的查詢。這就是 onResult
只被呼叫一次的原因。
使用不同的查詢變數:如果你的查詢接受變數,嘗試在兩個組件中使用不同的變數值。這會讓 Apollo 認為它們是兩個不同的查詢,因此都會觸發 onResult
。
停用快取:雖然這不是一個推薦的做法(因為它可能會影響到效能),但你可以設定 Apollo Client 不使用快取。這樣,每次查詢都會重新呼叫 onResult
。
使用獨立的 onResult
處理函數:在每個組件中,你可以定義一個專用的 onResult
處理函數,這樣即使查詢結果是從快取中獲取的,你仍然可以對結果進行特定的處理。
在 Vue Apollo Composition API 中,理解 Apollo Client 的內部工作原理是很重要的,這可以幫助你更有效地解決可能遇到的問題。希望這篇文章能夠幫助到面對「onResult」只呼叫一次問題的開發者們。