国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

redux.js詳解及基本使用

2024-05-06 16:51:24
字體:
來源:轉載
供稿:網友

什么是Redux

?      Redux我們可以把它理解成一個狀態管理器,可以把狀態(數據)存在Redux中,以便增、刪、改。例如:

從服務器上取一個收藏列表,就可以把取回來的列表數據用Redux管理,多個頁面共享使用,不用把數據傳來傳去。

A頁面改變了一個狀態,B頁面要收到通知,做相應的操作。

?       Redux是一個給JS應用使用的可預測的狀態容器,也就是說結果是可預測的,每一次改動會有確定的結果,正如函數式編程思想里的相同的參數會返回相同的結果。

?       Redux的狀態會存儲在單一的數據源中(存儲在對象樹中),這樣,讀取和共享就非常方便,不必去考慮會取錯。狀態是只能直接讀取的,不能直接修改,修改只能通過發送事件(action)統一處理,這樣便于分析事件,也可以避免隨處修改狀態造成競態條件。統一處理狀態時用純函數(reducers中的函數)來修改狀態,這些函數只是一個勾子,當需要修改狀態樹時Redux會來調用,你可以編寫不同的函數來處理不同action對應的狀態,或者復用一個函數來處理多種action。

為什么要用

?        簡單來說就是使不易維護的數據變得維護簡單,以小程序舉例:多個頁面要共享一套數據,而且這些數據是隨時可能從網絡上獲取更新或增減的(如頁面跳轉時要帶數據過去(非基本類型的數據),這時如果用app中的全局變量來暫存,存的變量多了,以后維護是個大麻煩,別人接手代碼也會很煩惱。),還有一個地方的數據有改變,其他地方要收到通知等這些場景就可以使用Redux來做,如果你沒有遇到這些問題,說明你的項目還沒有到這些復雜的階段,可以暫不考慮用Redux。

Redux的四個部件

redux.js

Action:action是一個事件,用來描述發生了什么事,例如用戶點擊了一個刷新按鈕,就會產生一個獲取最新數據的事件,Action就是用來標識這個事件的,Action是一個JS對象,擁有2個屬性,一個type,一個data,type用來表示該action的類型,data為新的狀態數據,既然是對象當然還可以帶上一些其他的屬性,在處理狀態的時候使用。
Reducer:reducer是一個處理狀態的函數,真正的狀態數據處理就是在這個函數里,reducer接受兩個參數,一個是修改前的狀態(state)對象,一個是action??梢栽趓educer中判斷action的type屬性來確定是一個什么事件然后對state做相應的處理,并返回新的state。

Store:store是Redux的CPU,狀態處理器,它提供了一些api給我們使用,如:

getState方法,可以獲取到最新的狀態對象樹。
subscribe方法用來訂閱狀態的更新,該方法接受一個函數做為監聽器,并會返回一個注銷訂閱的函數,以便我們在不需要訂閱時注銷改監聽器。

dispatch方法用來分發事件,它接受一個action作參數,把事件發出去。

State:state是存儲的數據,數據會以對象樹的結構來管理,這里要注意,Store每次傳給reducer的state是整個state對象樹中對應該reducer名字(key)的子對象。

?        事件發出后store會派reducer去處理事件,得到新的state,然后通知給各個監聽器有新的變化(觀察者模式)。
總體來說Redux就像是一個快遞倉庫(store),里面的貨物(state)按地域分別存儲,每當有一個新的貨物進來(dispatch),處理程序或人員(reducer)就會去按地名(type)添加到倉庫對應的位置,然后倉庫通知(subscribe)快遞員來取貨物。

1、先是安裝reduxJx, cnpm i --save rudux2、創建一個store的js文件 3、使用import來引用 redux   import { createStore } from 'redux'4、然后在store 創建一個全局管理數據對象const preloadState = {  cartList: []}5、處理全局數據的方法const reducer = function(state, action){// 參數state:上一次的state狀態// 參數action:事件描述對象console.log(action.type);處理數據方法if (item.a === 0 ){  ...代碼}//返回下一次全局使用的state狀態return state;}//創建倉庫const store = createStore(reducer, preloadState);export default store6、dispatch的使用     在store以外 store.dispatch()調用 參數1:設置store里面的action相對的type值,參數2:傳遞的數據   如下:      store.dispatch({          type: 'add',          value: {            id: 2          }      })然后在store里面的action里面可以獲取到 type和傳入的value值,也可以在全局管理數據中的state改變全局的數據7、在組件(頁面)中也可以通過store. getState()來獲取你存儲的相對應的值,8、store.subscribe()的操作是基本用來監聽 store里面的一些數據變化進行操作的,需要主要的是dispatch的操作順序,

總結

以上所述是小編給大家介紹的redux.js詳解及基本使用,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌兰察布市| 阿图什市| 乐都县| 扶余县| 木兰县| 阿拉善盟| 松溪县| 通州市| 北碚区| 晋江市| 淳安县| 贡觉县| 榕江县| 阿巴嘎旗| 东辽县| 哈尔滨市| 灵台县| 张家川| 沙雅县| 海南省| 平果县| 安远县| 吴旗县| 临澧县| 大同市| 鲁甸县| 无锡市| 吉首市| 凉城县| 中方县| 乐山市| 富裕县| 东辽县| 景谷| 菏泽市| 重庆市| 孙吴县| 裕民县| 特克斯县| 磐安县| 壤塘县|