在Redux中,應該把邏輯放在action creator裡,還是分散在reducer裡?

時間 2021-05-31 11:23:17

1樓:海棠頭場雪

如果需要多加只是關閉彈窗這種簡單操作。因為我們專案的這種狀態一般是放在local state裡面的。所以一般會讓第乙個action creater返回promise。

在ui層setstate

2樓:

我之前也思考過這個問題,我的答案是業務邏輯放action裡,理由很簡單,acton能訪問整個store,如果放reducer裡,需要訪問另外乙個reducer姐的資料基本上做不到!

3樓:不羈的風

邏輯處理放在action裡面,reducer應該盡量保證簡單。action裡面可以進行資料處理等side effect,且劃分出合理的粒度也能個保證action的復用。

4樓:杜鵬程

一般來說的話,很少會在reducer裡面處理業務邏輯,action一般就是把它當作對資料操作的手段,類似於對資料庫的增刪改查,業務邏輯一般在action creator裡面做。

但是對於第一種情況同時dispatch兩個action存在乙個問題,就是如果這次update操作是乙個非同步操作的話,需要考慮更新失敗後該如何處理。所以這裡不應該直接dispatch兩個action。可以依賴redux-thunk類似的中介軟體,拆成兩個action creator,updateActionCreator和modalTriggerActionCreator。

dispatch updateActionCreator後,根據返回狀態在updateActionCreator裡面處理Modal的狀態。

其實這種場景蠻適合redux-observable的,把邏輯都放到Epics裡面去做處理。

5樓:偷梗大師小怪獸

萌新講講自己的看法,

感覺應該在action裡處理邏輯啊。

很簡單,現在這個動作你是需要更新某些頁面了,那如果之後某個動作只需要更新其中部分呢?你難道還要再寫乙個action麼?那麼多元件那麼多排列組合你都要寫成action麼?

所以個人觀點:乙個action應該對應乙個元件更新事件,至於乙個動作觸發多個元件更新。那就是在action creator裡面新增邏輯,dispatch多個action。

可能特殊需求會有特殊的處理吧。

6樓:

前面@流形

@程墨Morgan老師說得比較清楚了,我就個人使用說個意見。

方案:如果都是同步的,我傾向於第一種方式。但是一旦涉及到非同步,要用到中介軟體了,可以選擇在react中dispatch乙個類似第二種方案裡的複雜action(注意這個action是給中介軟體而不是reducer的),然後在中介軟體裡搞非同步請求和相關處理邏輯,然後拆分成兩個action(類似於方案1裡的形式)分別dispatch給reducer。

原因:1.我覺得給reducer處理的每個action都需要比較「通用」,有「原子性」,action是應該和store內容相關而不是和你有什麼業務相關。

原因是(1)reducer能感知的只是部分store (2)如果用第二種方案,想象下你要在modal控制相關的reducer裡寫多少個業務相關的case,而且你會發現這些case做的事情往往都是相同的,比如把modalVisiable欄位設定成false。

p.s. 如果題主覺得我說得亂的話,記住第一種方案是更好的方案就好了。遇到解決不了的問題在它的基礎上想辦法。

7樓:哇塞田

不請自來,最近也在糾結這個問題,我們專案目前是處理邏輯都放在reducer中,action只是相當於乙個指令,所以也在糾結這個問題......

8樓:aaronisme

就我的經驗上來看,是放到action creator裡,如果是兩個action就應該分開,而且 reducer裡本身就是一堆的switch case裡再加if else更難維護

9樓:

action裡。只不過有些action可以抽象乙個方法,配置乙個常量統一管理。個人只會reducer處理資料,action裡處理邏輯。不知道大家怎麼用的

c 模板程式設計應該把實現放在標頭檔案中嗎,這樣寫會不會讓標頭檔案變得很難看?

Kendy 實現是可以寫在cpp中的,但是使用時需要在cpp中再特例化宣告一遍。例如想用到乙個c 17的enum庫,但是整個工程只支援C 11的,只想用到那個enum庫的cpp檔案用C 17編譯,這時就需要在該cpp檔案裡面去實現了 myenum.h template extern T g GetE...

大學生活中,應該把考證放在乙個怎樣的位置?

年輕氣盛 因此,當我們工作時,我們不僅要做所有事情,而且要做好一切。我們可以通過上面提供的方法提高我們的工作效率,避免 做任何事,無所事事 的惡性迴圈。 小宇Bellaaaa 朋友們對西溪的變化感到驚訝,也因為她對理想的堅持和追求而感動。嘻嘻說,在他自己的一天,感謝一位老同學,正是因為她的提醒,西溪...

讀MBA應該把時間放在取得高分上嗎?

林晨mba 讀MBA要不要把時間放在取得高分上,取決於提前面試的成績 首先,一定要花時間準備和參加高校的提前面試,因為如果提面成績拿到了優秀,筆試可以稍微輕鬆一點了,只要通過了國家線或自主院校的自劃線即可被錄取 其次,如果提面沒有拿到優秀,是合格或者通過,那麼筆試盡量拿高分了,因為是按照總成績來排名...