我創建了一些工廠函數,它們爲我提供了簡單(或更高級)的reducer。例如(簡單的 - 行動型的基礎設置RequestState
常數的值):在Redux中編寫高階縮減器
export const reduceRequestState = (requestTypes: RequestActionTypes) =>
(state: RequestState = RequestState.None, action: Action): RequestState => {
switch (action.type) {
case requestTypes.start:
return RequestState.Waiting;
case requestTypes.success:
return RequestState.Success;
case requestTypes.error:
return RequestState.Error;
case requestTypes.reset:
return RequestState.None;
default:
return state;
}
};
使用這些工廠函數和redux
combineReducers
我可以撰寫他們入處理大部分的我不經意的動作功能齊全的減速。這給了我可讀的代碼,並防止我犯愚蠢的錯誤。
工廠對於常見操作很有幫助,但是當我需要添加一些自定義行爲(對於操作類型),這應該會顯着修改商店的某些部分,我想編寫一個可以處理該操作的自定義部分我。 這個想法是以迭代的方式組成減速器,所以combineReducers
但是對於一個數組。這樣我就可以使用我的工廠創建Reducer,然後將其與我的自定義Reducer結合起來處理一些特定的操作。數組的combineReducers
然後會調用第一個,認識到沒有任何變化,並調用第二個(自定義)處理該動作。
我正在尋找一些解決方案,發現redux-actions
,但不太喜歡它鏈接動作和減速器的方式,使得語義與我以前所用的語義有點不同。也許我不明白,但最終我希望看到我的減速器被寫成純功能。
我找的一些提示,會告訴我的方式。 是否有任何圖書館或項目使用任何一種更高階的減速器並以某種方式將它們組合在一起? 關於如上所述組成減速器有什麼不利之處嗎?