# Redux簡介
:-: 
Redux 是 JavaScript 狀態容器,提供可預測化的狀態管理。
2013年問世的Flux飽受爭議,而2015年DanAbramov提出了在Flux基礎上的改進框架Redux,則是一鳴驚人,在所有Flux的變體中算是最受關注的框架,沒有之一。
Redux可以讓你構建一致化的應用,運行于不同的環境(客戶端、服務器、原生應用),并且易于測試。不僅于此,它還提供超爽的開發體驗。
Redux 除了和 React 一起用外,還支持其它界面庫。它體小精悍(只有2kB)且沒有任何依賴。
## Redux 的 基本原則
Flux 的基本原則是“單向數據流”, Redux 在此基礎上強調三個基本原則:
- 唯一數據源( Single Source of Truth);
> 整個應用的 state 被儲存在一棵 object tree 中,并且這個 object tree 只存在于唯一一個 store 中。
---
- 保持狀態只讀( State is read- only);
> 保持狀態只讀,就是說不能去直接修改狀態,要修改Store的狀態,必須要通過派發一個action對象完成,這一點,和Flux的要求并沒有什么區別。
---
- 數據改變只能通過純函數完成( Changes are made with pure functions)。
> 這里所說的純函數就是Reducer,Redux這個名字的前三個字母Red代表的就是Reducer。按照創作者DanAbramov的說法,Redux名字的含義是Reducer+Flux。
> Reducer不是一個Redux特定的術語,而是一個計算機科學中的通用概念,很多語言和框架都有對Reducer函數的支持。就以JavaScript為例,數組類型就有reduce函數,接受的參數就是一個reducer,reduce做的事情就是把數組所有元素依次做“規約”,對每個元素都調用一次參數reducer,通過reducer函數完成規約所有元素的功能。
---
## Redux 的設計思想
(1)Web 應用是一個狀態機,視圖與狀態是一一對應的。
(2)所有的狀態,保存在一個對象里面。
## 來自 Redux 的聲明
需要強調一下:Redux 和 React 之間沒有關系。Redux 支持 React、Angular、Ember、jQuery 甚至純 JavaScript。
盡管如此,Redux 還是和 React 和 Deku 這類框架搭配起來用最好,因為這類框架允許你以 state 函數的形式來描述界面,Redux 通過 action 的形式來發起 state 變化。
# 什么時候需要用到 Redux
1. 用戶的使用方式復雜
2. 不同身份的用戶有不同的使用方式(比如普通用戶和管理員)
3. 多個用戶之間可以協作
4. 與服務器大量交互,或者使用了WebSocket
5. View要從多個來源獲取數據
6. 某個組件的狀態,需要共享
7. 某個狀態需要在任何地方都可以拿到
8. 一個組件需要改變全局狀態
9. 一個組件需要改變另一個組件的狀態
# 什么時候不需要使用 Redux
如果你不知道是否需要 Redux,那就是不需要它。只有遇到 React 實在解決不了的問題,你才需要 Redux 。
以下情況不需要使用到 Redux,否則倒容易增加代碼的復雜性。
1. 用戶的使用方式非常簡單
2. 用戶之間沒有協作
3. 不需要與服務器大量交互,也沒有使用 WebSocket
4. 視圖層(View)只從單一來源獲取數據
- 簡介
- 第一章 React入門
- 1.1 創建一個React項目
- 1.2 組件
- 1.3 JSX
- 1.4 eject
- 1.5 渲染
- 第二章 React組件
- 2.1 組件定義
- 2.2 數據處理
- 2.2.1 props
- 2.2.2 state
- 2.3 生命周期
- 2.3.1 裝載過程
- 2.3.2 更新過程
- 2.3.3 卸載過程
- 2.4 事件處理
- 2.5 條件渲染
- 2.6 列表渲染
- 第三章 React高級
- 3.1 靜態類型檢查
- 3.1.1 flow
- 3.1.2 typescript
- 3.2 React Developer Tools
- 第四章 Redux狀態管理
- 4.1 安裝與配置
- 4.2 一個簡單的計數器開始
- 4.3 Store
- 4.3.1 獲取state
- 4.3.2 subscribe
- 4.4 Action
- 4.4.1 Action Creators
- 4.5 Reducer
- 4.5.1 Reducer 的拆分
- 4.6 與其他狀態管理工具的對比
- 第五章 React-Router路由
- 參考資料