# 組織 Reducer
作為核心概念, Redux 真的是一種十分簡單的設計模式:所有你“寫”的邏輯都集中在一個單獨的函數中,并且執行這些邏輯的唯一方式就是傳給 Redux 一個能夠描述當時情景的普通對象(plain object)。Redux store 調用這些邏輯函數,并傳入當前的 state tree 以及這些描述對象,返回新的 state tree,接著 Redux store 便開始通知這些訂閱者(subscriber)state tree 已經改變了。
Redux 設置了一些基本的限制來保證這些邏輯函數的正常工作,就像 [Reducers](../basics/Reducers.md) 里面描述的一樣,它必須有類似 `(previousState, action) => newState` 這樣的結構,它們通常被稱作 **reducer 函數**,并且必須是**純**函數和可預測的。
在這之后,只要遵循這些基本的規則,Redux 就不會關心你在這些 reducer 函數中是如何組織邏輯的。這既能帶來更多的自由,也會導致很多的困惑。不過在寫這些 reducer 的時候,也會有很多的常見的模式以及很多需要注意的相關信息與概念。而隨著應用規模逐漸變大,這些模式在管理這些錯綜復雜的 reducer 時,處理真實世界的數據時,以及優化 UI 性能時都起著至關重要的作用。
### 寫 Reducer 時必要的概念
這些概念中的一部分,可能已經在別的 Redux 文檔中描述過了。其他的概念也都是些比較普通的或者可以適用于 Redux 外的,這里有許多文章來詳細的解釋這些概念。這些概念和技巧是能寫出符合 Solid 原則的 Redux reducer 邏輯的基礎。
**深入的理解**這些概念是你要學習更高級的 Redux 技術之前必不可少的事情。這里有一個推薦的閱讀列表。
#### [必要的概念](./reducers/PrerequisiteConcepts.md)
另外還值得注意的是,在特定的應用特定的架構下,這些建議可能也不是非常的適合。舉個例子,如果一個應用使用了 Immutable.js Map 來存儲數據,那么它組織 reducer 邏輯的時候就可能和用普通對象存儲數據的情況不一樣。 這些文檔主要假設我們使用的都是 Javascript 普通對象,但即使你使用一些其他的工具,這里的很多規則其實依然適用。
Reducer 概念和技巧
- [基本 Reducer 結構](./reducers/BasicReducerStructure.md)
- [拆分 Reducer 邏輯](./reducers/SplittingReducerLogic.md)
- [重構 Reducer 的例子](./reducers/RefactoringReducersExample.md)
- [使用 `combineReducers`](./reducers/UsingCombineReducers.md)
- [超越 `combineReducers`](./reducers/BeyondCombineReducers.md)
- [范式化 State 結構](./reducers/NormalizingStateShape.md)
- [更新范式化數據](./reducers/UpdatingNormalizedData.md)
- [重用 Reducer 邏輯](./reducers/ReusingReducerLogic.md)
- [Immutable 的更新模式](./reducers/ImmutableUpdatePatterns.md)
- [初始化 State](./reducers/InitializingState.md)
- 自述
- 介紹
- 動機
- 核心概念
- 三大原則
- 先前技術
- 學習資源
- 生態系統
- 示例
- 基礎
- Action
- Reducer
- Store
- 數據流
- 搭配 React
- 示例:Todo List
- 高級
- 異步 Action
- 異步數據流
- Middleware
- 搭配 React Router
- 示例:Reddit API
- 下一步
- 技巧
- 配置 Store
- 遷移到 Redux
- 使用對象展開運算符
- 減少樣板代碼
- 服務端渲染
- 編寫測試
- 計算衍生數據
- 實現撤銷重做
- 子應用隔離
- 組織 Reducer
- Reducer 基礎概念
- Reducer 基礎結構
- Reducer 邏輯拆分
- Reducer 重構示例
- combineReducers 用法
- combineReducers 進階
- State 范式化
- 管理范式化數據
- Reducer 邏輯復用
- 不可變更新模式
- 初始化 State
- 結合 Immutable.JS 使用 Redux
- 常見問題
- 綜合
- Reducer
- 組織 State
- 創建 Store
- Action
- 不可變數據
- 代碼結構
- 性能
- 設計哲學
- React Redux
- 其它
- 排錯
- 詞匯表
- API 文檔
- createStore
- Store
- combineReducers
- applyMiddleware
- bindActionCreators
- compose
- react-redux 文檔
- API
- 排錯