问题标签 [redux-observable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1113 浏览

redux - 如何用 redux-observable 做一个简单的通知系统?

我正在尝试使用 redux-observable 做一个简单的通知系统。我是新手,rxjs所以我很难做到。

我想做的是:

  1. 调度意图以显示通知
  2. 检测意图Epic
  3. 调度插入新通知的操作
  4. 等待 3 秒
  5. 调度另一个删除旧通知的操作

这是我的史诗:

真正发生的NOTIFICATION_DISPLAY_REQUESTED是调度,3 秒后,hideNotification调度。displayNotification永远不会发生。

我可以displayNotification从视图中调度,延迟 3 秒,然后调度hideNotification。但是稍后如果有超过 3 个活动通知,我想在添加新通知之前删除最后一个通知。这就是为什么我displayNotification在这个简单的案例中从史诗内部手动调度。

那么,我该如何实现呢?抱歉,如果这是一个超级简单的问题,我对这一切都很陌生,需要一些帮助。

注意:我知道redux-saga存在,只是这redux-obsevable对我来说更有意义。

0 投票
1 回答
1515 浏览

javascript - Epic 未在 Redux-Observable 中返回流

我正在使用redux-observable一个辅助项目进行测试,并且我反复遇到这个问题:Uncaught TypeError: combineEpics: one of the provided Epics "handleSearchEpic" does not return a stream. Double check you're not missing a return statement!

我已经在网上参考了 redux observable docs 和其他几个示例,但我无法确定我可能遗漏了什么。以下是我的行动和有问题的史诗。

这是应用程序的根目录和存储配置:

0 投票
1 回答
576 浏览

javascript - 将回调从动作传递到 Epic

我目前正在使用动作创建器将回调函数传递给 Epic,但是我遇到了常见错误:Actions must be plain JavaScript objects...

有没有一种方法可以执行回调并继续处理 Epic 中的 observable?我也尝试过使用花括号和显式返回将链分配给一个变量并在调用回调后返回它,但我遇到了同样的问题。

代码:

0 投票
2 回答
650 浏览

rxjs - 从轮询函数创建 observable

我有一个函数可以在某些时间间隔执行一些数据。类似于轮询功能的东西:

所以我想在这样的redux-observable 史诗中使用这个函数(后面是伪代码):

如何订阅轮询功能并使用 rxjs?

编辑:

我尝试过但失败了

我可以将poll函数包装成一个承诺,然后使用,Rx.Observable.fromPromise但我想以反应的方式来做。

0 投票
2 回答
1030 浏览

firebase - 使用 Redux-Observable 在 React-Redux-Firebase 应用程序中实现自动保存

我正在使用 redux-observable 为 react-redux-firebase 侧项目实现自动保存。目前,我有一个 updateFretboardEpic,它响应任何修改当前拥有对 Firebase 数据库的引用 (firebaseKey) 的 Fretboard 组件的操作。1 秒去抖动后,updateFretboard 应该将组件的新状态保存到 Firebase。

但是,我目前收到以下错误:

在实现 redux-observable 之前,updateFretboard 使用 Redux-Thunk 来调度一个动作:

将它与 redux-observable 一起使用将产生错误而没有任何自动保存。我没有返回一个 thunk,而是将其更改为:

有趣的是,updateFretboardEpic 将自动保存流中的第一个操作,返回错误,并且不会自动保存之后的任何后续操作。updateFretboard 目前不流经我的任何减速器(它只负责将新状态传递给 Firebase),尽管我将来可能会选择接收一个知道保存何时发生的承诺并将其传递给我的减速器。

我是 RxJS/redux-observable 的新手,所以我怀疑有更好的方法来做到这一点。想法?

0 投票
0 回答
847 浏览

javascript - Rx.Observable.fromPromise 不适用于 Redux-Observable Epics

我目前正在开发一个反应原生应用程序,并尝试将redux-observable用于带有 redux 的中间件。

为简单起见,我只包括包含承诺的史诗,而不是用网络代码稀释它。

这是我针对只接受用户名、密码并应返回用户名、密码和身份验证令牌的身份验证 API 的单元测试。同样,这应该立即返回并让商店包含AUTHENTICATEAUTHENTICATE_FULFILLED

我的身份验证史诗看起来像

注意:myservicesRoot.actions.authenticate返回包含该AUTHENTICATE类型的要使用的操作,并authenticate_fulfilled返回另一个AUTHENTICATE_FULFILLED操作。

我的单元测试输出是

如果我将史诗更改为,我的测试通过

我不确定为什么fromPromise没有给出我期望的行为。我把它缩小到一个与承诺有关的问题。本质上,这将是网络请求的结果,然后进行相应处理。

谢谢您的帮助。

0 投票
1 回答
3103 浏览

reactjs - Redux-observable POST ajax 请求从不发送网络请求

我有这个redux-observable史诗,它将POSTjson 主体发送到我的后端,但它实际上从来没有发送实际的网络请求。它使用Rx.DOM.Request.post(url, [body])(我想?请查看我的导入以确认)。我可以验证网络请求永远不会离开我的应用程序,更不用说到达我的后端了:

它通过按下按钮来调用:

这是action上述史诗中对象的内容:

是因为我的 json 使用了所有没有转义的双引号吗?

我可以验证在按下按钮时执行 ajax 帖子的史诗中的代码行确实运行,并且在第一个按钮按下时它最终调度uploadProductRejected(error),甚至没有发出网络请求,以及在哪里调度错误uploadProductRejected动作是公正的{ },并且在随后的按钮按下时,它甚至不会发送拒绝或已完成的动作。

知道为什么它被拒绝,为什么它甚至从未尝试发出网络请求吗?

0 投票
2 回答
704 浏览

javascript - 获取失败导致无限组件生命周期循环

使用连接的容器,我有一个由更高阶的减速器(如下所示)包裹的减速器,以捕获和处理错误。在调用 fetch 请求componentDidMount失败时,连接的容器将自行卸载componentWillUnmount。这会导致容器中的无限循环,因为它将再次挂载,获取将失败,并且容器将自行卸载。

任何想法为什么在连接组件中有更高阶的减速器会导致这种情况?

错误处理高阶减速器:

示例容器:

减速器示例:

史诗:

0 投票
1 回答
1211 浏览

redux-observable - 如何使用 Redux Observable 填充存储并按顺序等待返回?

我正在尝试使用 Redux Observable 调用一个操作来获取一些数据,等待它的返回,然后获取更多依赖它的数据。

我有一个从 fetch 填充商店的史诗FetchTodos。这会监听FETCH_TODOS操作,然后调用我的 todos API 并填充{todos: [] } =

我的商店也有评论区todoComments。但是,我只想填充todoComments一次FETCH_TODOS返回并填充商店。

在命令式代码中,这可能如下所示:

我最接近这个问题的是 Redux Observable Repo 中的这个问题,但我不明白如何有效地做到这一点。这对我来说是一个很常见的场景。

我想尽可能多地重用代码。FETCH_TODOS在这个例子中,我可以从多个组件中 调度。

我将如何使用 Redux-Observable 完成此任务?

0 投票
1 回答
3965 浏览

reactjs - redux-observable:动作必须是普通对象。使用自定义中间件进行异步操作

我的史诗有问题,请帮我找出哪里出错了。谢谢!

以下代码导致我出现错误:

这是我的 configureStore 文件: