Redux中的重要概念

2021-09-07 06:54:26 字數 2979 閱讀 8517

首先,先看看第一張圖,圖中展示了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) => newstate
reducer函式的形式通常如下:

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 component 

} constructor(props, context)

render() = this.props

return children.only(children)

}}

provider元件主要用到了react通過context屬性,可以將屬性(props)直接給子孫component,無須通過props層層傳遞,從而減少元件的依賴關係。

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檔案二進或其他格式,不可直接檢視,是乙個不可變的字串表,每乙個鍵都是張量...