2016-10-14 56 views
2

我是redux的新手,看過redux-actions或在reducer中使用switch語句,儘管我並不反對使用switch語句,但我想知道,使用調用動作方法不是更容易嗎?Redux - 在減速器中使用動作對象方法而不是開關

下面是我在想什麼

import actions from './actions' 

const reducer = (state = {}, action) => { 
    if (actions[action.type]) return Object.assign({}, 
     state, actions[action.type](action) 
    ); 
    return state; 
} 

我剛剛測試了這個在我的第一個減速和行動,和它的作品,但它似乎很明顯的,所以我不知道爲什麼交換機類型是選擇的方式?

+0

1.你的行爲應該把現有的狀態對象作爲參數嗎? 2.開關盒只是一個文體決定。只要你的reducer函數返回一個新的狀態對象,你就可以做任何事情。不管你覺得整潔/清潔:) – iamnat

回答

1

一些觀察:

  1. 不要把這些外部函數作爲 「動作」。他們不是行爲。他們本身就是減速器。
  2. 作爲reducers,你真的應該將狀態對象傳遞給他們。通常,您需要/需要利用當前狀態中包含的信息以及操作對象中包含的信息。

否則,這似乎是一個合適的方法。

+1

'switch'和一個帶有函數的對象(散列)之間的區別可以忽略不計。但是,Object.assign將狀態形狀鎖定到一個對象,並且不允許刪除。它只是不會爲一般解決方案。 – DDS

+1

的確如此。但我始終保持狀態一致。對於我的應用程序的其餘部分來說,如果減速器正在任意改變狀態,那將會有問題。 –

+0

有時一個數組比對象更合適。 – DDS

2

切換語句無疑是最常用的方法,但查找表也很常見。如果你願意,你甚至可以使用普通的if/then條件。最終,你如何編寫你的減速器取決於你。

僅供參考,此主題在Redux FAQFAQ: Reducers部分中進行了介紹。您也可能想要閱讀新的"Structuring Reducers"操作方法部分。

相關問題