首先,先看看第一張圖,圖中展示了redux的單向資料流,以及action、reducer和store這三個核心概念。
下面就圍繞上圖,非別介紹action、reducer和store這三個概念。
action是乙個物件,用來代表所有會引起狀態(state)變化的行為(例如服務端的響應,頁面上的使用者操作)。
假如我們要實現乙個任務管理系統,那麼新增任務的action物件就會是下面的形式:
action物件是行為的描述,一般都會包含下面的資訊:action通過action建立函式(action creator)來建立,action creator是乙個函式,最終返回乙個action物件。
對於新增任務這個行為,對應的action creator如下:
function addtask(name, category) ;action物件僅僅是描述了行為的相關資訊,至於如何通過特定的行為來更新state,就需要看看reducer了。}
關於reducer,最簡單的描述就是:
根據上面的描述,reducer函式就可以表示為:
(previousstate, action) => newstatereducer函式的形式通常如下:
function reducer(state = , action)store是redux中資料的統一儲存,維護著state的所有內容,所以store的主要功能就是:}
看到store提供的方法,就可以把action、reducer和store聯絡在一起了:
store通過dispatch(action)方法來接收不同的action
根據action物件的type和資料資訊,store物件可以通過reducer函式來更新state的內容
下面就來看看第二張圖,跟第一張圖的差別不大,只是增加了中介軟體(middleware)來處理action。
在redux中,middlerwares主要的作用就是處理action,redux中的action必須是乙個plain object。但是為了實現非同步的action或其他功能,這個action可能就是乙個函式,或者是乙個promise物件。這是就需要中介軟體幫助來處理這種特殊的action了。
也就是說,redux中的middleware會對特定型別action做一定的轉換,所以最後傳給reducer的action一定是標準的plain object。
針對action的特徵,reudx middleware可以採取不同的操作:
可以選擇跳過某些中介軟體,如:dispatch(action)
或者更直接了當的結束傳遞,如:return。
redux中常用的中介軟體:
經過前面的介紹,我們已經看到了redux中的一些核心概念。redux跟react沒有直接的關係,本身可以支援react、angular、ember等等框架。
通過react-redux這個庫,可以方便的將react和redux結合起來:react負責頁面展現,redux負責維護/更新資料狀態。
到這裡,第三張圖就展示了react-redux這個庫的工作原理,react和redux是怎麼聯絡到一起的。
react-redux中提供了兩個重要功能模組provider和connect,這兩個模組保證了react和redux之間的通訊,下面就分別看看這兩個模組。
通過provider的**可以看到,provide本質上是乙個react元件。
export default class provider extends componentprovider元件主要用到了react通過context屬性,可以將屬性(props)直接給子孫component,無須通過props層層傳遞,從而減少元件的依賴關係。} constructor(props, context)
render() = this.props
return children.only(children)
}}
connect方法的主要作用就是讓component與store進行關聯, store的資料變化可以及時通知views重新渲染。
任何乙個通過connect()函式處理過的元件都可以得到乙個dispatch方法作為元件的props,以及得到全域性state中的所有內容。
通過原始碼]可以看到,connect函式執行後,會返回乙個wrapwithconnect函式,該函式可以接收乙個react元件,然後返回乙個經過處理的connect元件。
class connect extends component
// 對stateprops、dispatchprops、parentprops進行合併
this.updatestate()
}shouldcomponentupdate(nextprops, nextstate)
}componentdidmount() )})}
render()
} connect.contexttypes =
return connect;
}
每篇文章的結尾都會有一些簡單的demo **,幫助理解文章中介紹的內容。
文中結合三張介紹了redux中的一些核心概念,以及react和redux之間通過react-redux這個庫進行互動。
更多詳細的內容,已經整理到了github上了(wilbertian/stepbystep-redux),通過這些介紹以及demo的執行結果,一定能對redux有乙個比較基本的認識。
redux 核心概念
強制使用action來改變state,這樣可以清晰的知道應用當中發生什麼 因為什麼而改變。function demoaction store.dispatch demoaction action就是乙個普通的js物件 reducer的作用相當於是action與state的聯結器 function d...
redux概念 基礎
demo 基於react 提取碼 b36i demo網盤位址 1 單一資料來源 2 state是唯讀的 3 使用純函式來執行修改 1 定義及注意點 2 寫法 新增新 todo 任務的 action 是這樣的 const add todo add todo 當應用規模越來越大時,建議使用單獨的模組或檔...
tensorflow中的重要概念
1.checkpoint model.ckpt.data 00000 of 00001 某個ckpt的資料檔案,儲存每個變數的取值,儲存的是網路的權值,偏置,操作等。2.model.ckpt.index 某個ckpt的index檔案二進或其他格式,不可直接檢視,是乙個不可變的字串表,每乙個鍵都是張量...