我使用的是redux-observable,在我的史诗中我使用browserHistory.push改变其中一些路线。这是标准/良好做法吗?我的直觉告诉不,但是需要你的意见。除了升级到react-router 4之后,我无法访问browserHistory,我该怎么做?是可以改变路线编程方式在可观察到的史诗内
1
A
回答
1
必须呼吁browserHistory.push()
是完全没问题的。如果它适用于您的用例,并且您不需要知道减速器中的路由更改,继续!
这就是说,“纯粹”的方式将是你的史诗般的发出一个动作,将导致路线变化。这可以在react-router v4中使用新的react-router-redux来完成,它取代old one with the same name。
添加后,您可以使用所提供的行动创造者:
import { push } from 'react-router-redux';
export const somethingEpic = action$ =>
action$.ofType(SOMETHING)
.switchMap(() => {
somethingLikeAjaxOrWhatever()
.mergeMap(response => Observable.of(
somethingFulfilled(response),
push('/success-page')
))
});
需要明确的是,push()
replace()
等在反应路由器,终极版是行动的创作者 - 又名行动工厂。它们本身并不会真正导致路线改变,或者完全没有任何副作用。他们返回需要发送的行动,以便改变路线。
使用动作来表示路由改变意图的另一个好处是可测试性。你不再需要模拟一个历史API,你可以断言史诗会发出预期的动作。这就是所谓的“作为数据的效果”,因为你的代码没有执行实际的副作用,你只是产生了意图。
相关问题
- 1. 保持史诗可观察到的动作收到
- 2. 关于可重复观察史诗的存根
- 3. 可重复观察史诗与多个过滤器
- 4. 在哪里我可以找到教程在雷克斯观测谷歌史诗?
- 5. 是否可以通过发布动作来启动/停止/恢复可重复观察的史诗?
- 6. 是否可以观察-visibleRect
- 7. 观察员可以观察多个可观察物吗?
- 8. 观察可观察范围内的所有属性更改
- 9. 如何观察多个可观察的线程
- 10. 水豚/观察html5 /历史路线变化
- 11. 过滤器可观察到的由可观察到的
- 12. MobX - 将参数传递为可观察的可变观察值?
- 13. 可观察到流
- 14. 是否有可能以编程方式连接到Chromecast路由?
- 15. 可终止线程观察器
- 16. 如何以编程方式更新复杂的基因敲除可观察性?
- 17. Java - 观察模式 - 观察一个班级,但可以访问另一个班级正在观察的内容
- 18. 剑道观察到的可变
- 19. Knockout.js:更改可观察到的值不会改变HTML
- 20. 在可观察到的情况下,我应该如何控制减速器或史诗对行动的反应?
- 21. Flex:changewatcher可以观察多个变量吗?
- 22. knockoutjs - 可观察到的可观察值的对象的observableArray
- 23. 无限可观察到的HashMap作为可观察的
- 24. Angular - 修改可观察值
- 25. 订阅可观察内容
- 26. 观察工厂可变
- 27. 可观察 - 将2个承诺转换为可观察到的
- 28. 可观察到的序列
- 29. 可观察到的转换
- 30. 拼合可观察到的
我正在使用react-router-redux,但是在升级软件包后它停止工作,而新版本仍然是测试版,所以我对使用它有点犹豫。 –
完全可以理解。不幸的是,现在你必须在react-router @ 4和react-router-redux @ 5或react-router @ 3和react-router-redux @ 4之间进行选择。所以如果你不想使用react-router-redux的测试版,你必须使用react-router @ 3。无论选择哪种方式,我的答案都适用,因为您会将操作发送给过渡。 Btw可重复观察仍然是测试版;) – jayphelps
@tmpdev是否回答了您的问题? – jayphelps