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

Posted

技术标签:

【中文标题】使用 Redux 时访问应用程序范围的客户端?【英文标题】:Access application wide client when using Redux? 【发布时间】:2019-03-07 09:45:33 【问题描述】:

我使用 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 存储中的变量中?这对我来说似乎有点奇怪,但并非不合理。还有更好的方法吗?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于使用 Redux 时访问应用程序范围的客户端?的主要内容,如果未能解决你的问题,请参考以下文章

在 NextJS 的 getServerSideProps 中访问 Redux 存储

使用 next-redux-wrapper 时访问 React 外部的 Redux 存储

在同构 Redux 应用程序中在哪里设置 cookie?

使用 redux 在 react-native 应用程序中保存访问令牌的最佳实践是啥?

Uber Eats API 范围

Redux 开发工具不适用于大型操作负载