我使用的是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