如何让 Redux Thunk 和 Apollo GraphQL 协同工作

Posted

技术标签:

【中文标题】如何让 Redux Thunk 和 Apollo GraphQL 协同工作【英文标题】:How to make Redux Thunk and Apollo GraphQL work together 【发布时间】:2017-08-19 15:58:35 【问题描述】:

在我的项目中,Redux Thunk 用于将所有异步函数保存在动作创建器中。

现在我正在尝试将 Apollo GraphQL 添加到我的项目中,一切正常,除了将 mutations 添加到我的功能组件并在那里调用它们时,它会破坏 redux thunk 架构。

如何解决?我想我可以创建新的动作创建器方法并将突变传递给它们,但它很快就会变成样板,这对我来说似乎不是一个好的解决方案。

【问题讨论】:

【参考方案1】:

Apollo 突变不会破坏 redux thunk 架构。如果您需要在突变后更新自己的减速器,则从突变的thencatch 中分派这些减速器的操作。 Apollo 的 graphql 容器旨在替换异步 redux 中间件(thunk、sagas、epics),而不是破坏它。

对于 Apollo Client 1.0

如果需要,您还可以将自己的 reducer 连接到 Apollo 调度的相同操作(APOLLO_MUTATION_INIT、APOLLO_MUTATION_RESULT 等)。只需确保您将 apollo 商店与您自己的商店集成在一起即可。见http://dev.apollodata.com/react/redux.html

更新:迁移到 Apollo Client 2.0

Apollo Client 2.0 移除了使用 redux 作为其缓存(存储)的依赖。如果您仍然希望能够在减速器中使用 1.0 样式的操作,可以使用此链接 https://www.npmjs.com/package/apollo-link-redux(自述文件中的示例用法)。

【讨论】:

以上是关于如何让 Redux Thunk 和 Apollo GraphQL 协同工作的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 redux-thunk 调度操作让 connected-react-router 重定向?

如何使用 redux-thunk `bindActionCreators`

将 redux 客户端从 REST 转换为 GraphQL Apollo?

如何使用 redux-thunk 和 TypeScript 调度 ThunkAction

如何使用“redux-thunk”调用 ajax?

thunk 和 action 完成后如何使用 redux 的当前状态?