2017-07-07 65 views
1

Redux的Provider組件和connect函數通過mapStateToProps提供對商店狀態的引用以包裝組件。正如在可愛的文章How to Build a Redux中提到的那樣,這樣做是爲了不需要引用全局存儲對象或無限地向DOM傳遞數據。ApolloProvider可以提供狀態而不是道具嗎?

這有一個很大的優勢:商店狀態是DOM不可知的。您可以將任何兩個元素放在頁面上的任何位置,並向它們提供您希望從商店獲取的任何數據。如果您有客戶搜索表單和客戶搜索結果列表......這些表示元素的關係不會影響他們對數據的訪問。

據我所知,阿波羅反應的ApolloProvider不贊成這一原則。當我使用graphql使用查詢包裝組件時,該查詢的結果作爲道具提供給包裝組件。如果應用程序中的其他位置需要這些結果,則必須手動傳遞或存儲在全局引用中。特別是,從graphql查詢返回的道具無法通過DOM傳遞。

有沒有一種方法可以使ApolloProvider以與Redux的Provider相同的方式「將查詢結果」提供給應用程序的其餘部分?我是否需要自己構建這個功能?或者,更好的是,我誤解了什麼?

回答

1

Apollo使用Redux來緩存graphql查詢結果。本質上,如果你有多個需要相同數據的組件,只需使用Apollo用相同的graphql查詢來包裝每個組件即可。甚至可以一次定義graphql連接器,並使用相同的連接器來包裝N個組件。

+0

看,我沒有想到這一點!我肯定會用這個來證明緩存的工作原理與廣告一樣。例如,如果查詢依賴於從ma​​pStateToProps傳入的變量,是否只有其中一個會觸發,其餘的則使用緩存? – Ziggy

+0

這聽起來有點像重新框架的「訂閱」。 – Ziggy

+0

嗯......也許可以通過使用'state.apollo.data.ROOT_QUERY.customers'作爲ID到Apollo的數據中去商店... – Ziggy

相關問題