2017-07-20 49 views
0

我使用redux-observable來處理redux異步操作。無限循環清除動作史詩

我需要通過id清除模塊狀態。

這是我clearModuleByIdEpic

const clearModuleByIdEpic = (action$: ActionsObservable<any>) => { 
    return action$.ofType(t.CLEAR_MODULE_BY_ID) 
    .map((action: IActionPayload<any>): string => action.payload.id) 
    .map(clearModuleById); 
} 

這是我的組件方法:撥打clearModuleById行動。

private onClear(id: string) { 
    this.props.clearModuleById(id); 
    } 

但是當我點擊刪除按鈕觸發onClear點擊事件。

它爲clearModuleById操作觸發無限循環。

我是否犯錯誤?

回答

2

看起來你正在從史詩中篩選出的史詩中分派相同的動作。這將始終*導致無限循環。您需要始終A)派遣不同的動作,或B)在觸發適當的副作用後,不派遣史詩中的其他任何東西。

它看起來並不像你的史詩般實際上在做任何事情,只是同步重新調度同一動作。可重複觀察的史詩將允許您爲某個動作執行一個或多個(a)同步副作用。

一般來說,你不應該從史詩中重新派遣相同的動作,除非你這樣做了某種形式的逃生艙口。這實際上是一種遞歸形式,適用於所有常見的遞歸問題。未能擺脫遞歸意味着無限循環。

*有例外,但這是真實的99.99%的時間。

+0

另外還想補充一點,這可能是由於對可重複觀察的工作方式的輕微誤解 - 你的史詩片段在他們已經達到減速器之後接收到動作*所以沒有必要重新發送傳入動作。從概念上講,我喜歡將你的史詩般的思維想象成一面奔跑。他們不能吞下或以其他方式阻止正常的重複發生,他們只能聽取行動,並且可能會決定在某些時候發出其他行爲,通常在執行副作用後。 – jayphelps