iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
Vue.js

Vue & GraphQL 探險之旅:30天,從新手村到魔王之巔系列 第 29

[Day29] Vue Apollo Composition API 的雙重查詢問題

  • 分享至 

  • xImage
  •  

當使用 Vue Apollo Composition API,許多開發者可能會發現當相同的查詢在兩個不同的組件中使用時,onResult 只會被呼叫一次。這可能會造成一些困惑,特別是當你希望在每個組件中都對查詢結果進行特定的處理時。本文將深入探討這個問題的原因,以及提供一些建議的解決策略。

原因

Apollo Client 內部使用了一個強大的快取機制。當同一個查詢被呼叫多次時,為了效能考量,Apollo Client 會嘗試從快取中檢索該查詢的結果,而不是重新向 GraphQL 伺服器發出查詢請求。因此,當兩個組件都使用同一個查詢時,第二個組件將從快取中獲取結果,而不會觸發新的查詢。這就是 onResult 只被呼叫一次的原因。

解決策略

  1. 使用不同的查詢變數:如果你的查詢接受變數,嘗試在兩個組件中使用不同的變數值。這會讓 Apollo 認為它們是兩個不同的查詢,因此都會觸發 onResult

  2. 停用快取:雖然這不是一個推薦的做法(因為它可能會影響到效能),但你可以設定 Apollo Client 不使用快取。這樣,每次查詢都會重新呼叫 onResult

  3. 使用獨立的 onResult 處理函數:在每個組件中,你可以定義一個專用的 onResult 處理函數,這樣即使查詢結果是從快取中獲取的,你仍然可以對結果進行特定的處理。

結論

在 Vue Apollo Composition API 中,理解 Apollo Client 的內部工作原理是很重要的,這可以幫助你更有效地解決可能遇到的問題。希望這篇文章能夠幫助到面對「onResult」只呼叫一次問題的開發者們。


上一篇
[Day28] 高階技能:管理多重來源的 Apollo Client 與精確的快取策略
下一篇
[Day30] Vue 與 GraphQL:打造安全的使用者驗證與授權流程
系列文
Vue & GraphQL 探險之旅:30天,從新手村到魔王之巔31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言