我是新來的反應/ redux。我想弄清楚redux中的所有部分如何相互作用。讓我陷入麻煩的一件事就是理解動作和減速器之間的關係。當一個動作被調用時,商店如何知道使用哪個減速器?它是否完全基於動作類型名稱?類型名稱必須是唯一的嗎?減速器向誰傳遞新的狀態對象,或者存儲器或動作?Redux - 減速機與動作的關係
據我瞭解,它是這樣的:
- store.dispatch(動作)被稱爲
- 店發現基於動作類型
- 減速克隆當前狀態對象相關的減速機,進行更改,將其傳回(某處)
我是新來的反應/ redux。我想弄清楚redux中的所有部分如何相互作用。讓我陷入麻煩的一件事就是理解動作和減速器之間的關係。當一個動作被調用時,商店如何知道使用哪個減速器?它是否完全基於動作類型名稱?類型名稱必須是唯一的嗎?減速器向誰傳遞新的狀態對象,或者存儲器或動作?Redux - 減速機與動作的關係
據我瞭解,它是這樣的:
1:商店如何知道使用哪個減速器 - >這完全基於動作類型。
2:類型名稱必須是唯一的嗎? - >這不是一個規則。但主要是,是的。每個操作都有一個獨特的類型名稱,並調用相應的reducer。
3:Reducer將哪個或哪些新狀態對象傳遞給Store或Action? - > Reducer不會在任何地方傳遞新的狀態對象。基本上,它會觸發一個狀態改變事件給所有正在監聽它的反應組件。監聽改變狀態的所有組件都會重新呈現,並帶有新版本的狀態,從而更新您的DOM。
通常,只有一個reducer負責完成狀態。
該減速機可以拆分成不同的較小減速機功能,每個功能負責不同的狀態切片。例如Redux's combineReducers()
utility可以做到這一點,但你也可以手動做到這一點。
如果使用combineReducers()
,每個減速器函數都針對每個調度操作執行。然後,他們純粹根據行爲類型來決定行動是否會影響其狀態的切片。如果是,則返回該切片的更新副本。如果它的切片不受該動作的影響,則它將保持不變。
在一個典型的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_LOADING
或STOP_LOADING
的動作,而在所有其他情況下,它應該只返回它以前的狀態。
爲了深入瞭解Redux(和Flux),我建議您查看Lin Clark或她的video的Code Cartoons,它涵蓋了大部分相同的事情。
謝謝。我現在開始把事情整理在一起。 – steveareeno