可以让 ApolloProvider 提供给 state 而不是 props 吗?

Can ApolloProvider be made to provide to state instead of props?

Redux 的 Provider 组件和 connect 函数通过 mapStateToProps 为包装组件提供对商店状态的引用。正如可爱的文章 How to Build a Redux 中所述,这样做是为了让您无需引用全局存储对象或无休止地向下传递数据 DOM.

这有一个很大的优势:存储状态是 DOM 不可知的。您可以将任意两个元素放在页面上的任意位置,并为它们提供您希望从商店中获得的任何数据。如果您有一个客户搜索表单和一个客户搜索结果列表...这些表示元素的关系不会影响它们对数据的访问。

据我所知,Apollo-react 的 ApolloProvider 不支持这个原则。当我使用 graphql 使用查询包装组件时,该查询的结果作为 props 提供给包装的组件。如果应用程序的其他地方需要这些结果,则必须手动传递它们或存储在全局引用中。特别是,从 graphql 查询返回的道具不能向上传递 DOM.

有没有办法让 ApolloProvider "provide" 以与 redux 的 Provider 相同的方式向应用程序的其余部分查询结果?我需要自己构建此功能吗?或者,更好的是,我是不是误会了什么?

Apollo 使用 Redux 缓存 graphql 查询结果。本质上,如果您有多个组件需要相同的数据,只需使用 Apollo 用相同的 graphql 查询包装它们中的每一个。您甚至可以定义一次 graphql 连接器,然后使用相同的连接器来包装您的 N 个组件。