使用 Redux 时访问应用程序范围的客户端?

Access application wide client when using Redux?

我使用 Redux 来管理状态,使用 Apollo 来执行 graphQL 查询。

我创建了一个可以从各种 React 组件访问的 Apollo 客户端。

import { ApolloClient } from 'apollo-client';
import { HttpLink } from 'apollo-link-http';
import { InMemoryCache } from 'apollo-cache-inmemory';

const link = new HttpLink({
    uri: getGraphqlEndpointUrl,
    headers: {
        'x-api-key': getApiKey(),
        'Authorization': jwtToken,
    },
});
const client = new ApolloClient({
    link: link,
    cache: new InMemoryCache(),
});

我如何使用 Redux 做到这一点?我是否将客户端存储在 Redux 存储的变量中?这对我来说似乎有点奇怪,但并非没有道理。还有更好的方法吗?

只有可序列化的对象才应该通过 redux 存储——函数或将函数作为属性的对象不属于 redux 存储。如果您需要在 React 应用程序的组件层次结构之外引用 Apollo 客户端,只需创建一个导出客户端对象本身的模块( 而不是 创建客户端的函数)。然后你可以在任何地方导入客户端(包括包含你的 ApolloProvider 的代码),你的所有代码都将指向客户端的同一个实例(和同一个缓存)。

重要的是,您的客户端模块导出实例化的客户端本身——如果您导出创建客户端的函数,则每次导入它时都会重新创建它。