中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redux.js詳解及基本使用

發布時間:2020-08-28 19:52:12 來源:腳本之家 閱讀:122 作者:小時候丶可帥 欄目:web開發

什么是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。可以在reducer中判斷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 rudux
2、創建一個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 store
6、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詳解及基本使用,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漯河市| 峡江县| 格尔木市| 延津县| 馆陶县| 靖西县| 慈溪市| 洱源县| 衡南县| 敦煌市| 泾川县| 汶上县| 三明市| 肥乡县| 五大连池市| 邯郸县| 深圳市| 尚志市| 青龙| 彭山县| 酒泉市| 栾城县| 班戈县| 永胜县| 封开县| 全椒县| 海淀区| 改则县| 枝江市| 卓尼县| 揭东县| 杭锦后旗| 庐江县| 塔城市| 武平县| 乌鲁木齐市| 呼伦贝尔市| 新津县| 张掖市| 启东市| 广平县|