2016-11-29 183 views
2

我是新來的反應/ redux。我想弄清楚redux中的所有部分如何相互作用。讓我陷入麻煩的一件事就是理解動作和減速器之間的關係。當一個動作被調用時,商店如何知道使用哪個減速器?它是否完全基於動作類型名稱?類型名稱必須是唯一的嗎?減速器向誰傳遞新的狀態對象,或者存儲器或動作?Redux - 減速機與動作的關係

據我瞭解,它是這樣的:

  1. store.dispatch(動作)被稱爲
  2. 店發現基於動作類型
  3. 減速克隆當前狀態對象相關的減速機,進行更改,將其傳回(某處)

回答

4

1:商店如何知道使用哪個減速器 - >這完全基於動作類型。

2:類型名稱必須是唯一的嗎? - >這不是一個規則。但主要是,是的。每個操作都有一個獨特的類型名稱,並調用相應的reducer。

3:Reducer將哪個或哪些新狀態對象傳遞給Store或Action? - > Reducer不會在任何地方傳遞新的狀態對象。基本上,它會觸發一個狀態改變事件給所有正在監聽它的反應組件。監聽改變狀態的所有組件都會重新呈現,並帶有新版本的狀態,從而更新您的DOM。

+0

謝謝。我現在開始把事情整理在一起。 – steveareeno

1

通常,只有一個reducer負責完成狀態。

該減速機可以拆分成不同的較小減速機功能,每個功能負責不同的狀態切片。例如Redux's combineReducers() utility可以做到這一點,但你也可以手動做到這一點。

如果使用combineReducers(),每個減速器函數都針對每個調度操作執行。然後,他們純粹根據行爲類型來決定行動是否會影響其狀態的切片。如果是,則返回該切片的更新副本。如果它的切片不受該動作的影響,則它將保持不變。

1

在一個典型的Redux設置中,這些操作被分派給所有reducer,並由減壓器決定他們是否關心該操作。一個常見的模式是在檢查action.type減速開關,有案件它在乎的行動和剛剛返回的當前狀態像這樣的默認情況下:

export default (state = false, action) => { 
    switch (action.type) { 
    case START_LOADING: 
     return true; 
    case STOP_LOADING: 
     return false; 
    default: 
     return state; 
    } 
} 

在這種情況下,我告訴我的減速器只關心類型爲START_LOADINGSTOP_LOADING的動作,而在所有其他情況下,它應該只返回它以前的狀態。

爲了深入瞭解Redux(和Flux),我建議您查看Lin Clark或她的videoCode Cartoons,它涵蓋了大部分相同的事情。