亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

擴展微信小程序框架功能:Redux組件使用講解

2020-03-21 16:19:11
字體:
來源:轉載
供稿:網友

Redux 是 JavaScript 狀態容器,提供可預測化的狀態管理。

Redux 是在 Flux 的基礎上產生的,基本思想是保證數據的單向流動,同時便于控制、使用、測試。Redux 并不依賴于其它 JavaScript 庫。

Redux

隨著 JavaScript 單頁應用開發日趨復雜,JavaScript 需要管理比任何時候都要多的 state (狀態)。 這些 state 可能包括服務器響應、緩存數據、本地生成尚未持久化到服務器的數據,也包括 UI 狀態,如激活的路由,被選中的標簽,是否顯示加載動效或者分頁器等等。

跟隨 Flux、CQRS 和 Event Sourcing 的腳步,通過限制更新發生的時間和方式,Redux 試圖讓 state 的變化變得可預測。這些限制條件反映在 Redux 的三大原則中:

單一數據源。整個應用的 state 被儲存在一棵 object tree 中,并且這個 object tree 只存在于唯一一個 store 中。
State 是只讀的。唯一改變 state 的方法就是觸發 action,action 是一個用于描述已發生事件的普通對象。
使用純函數來執行修改。為了描述 action 如何改變 state tree ,你需要編寫 reducers。

微信小程序,小程序框架,Redux,組件

Redux 主要分為三個部分 Action、Reducer、及 Store

Action。Action 很簡單,就是一個單純的包含 { type, payload } 的對象,type 是一個常量用來標示動作類型,payload 是這個動作攜帶的數據。Action 需要通過 store.dispatch() 方法來發送。
Reducer。Reducer 用來處理 Action 觸發的對狀態樹的更改。所以一個 reducer 函數會接受 oldState 和 action 兩個參數,返回一個新的 state:(oldState, action) => newState。
Store。Store 的作用就是連接Action 和 Reducer,Store 的作用有這么幾個:Hold 住整個應用的 State 狀態樹;提供一個 getState() 方法獲取 State;提供一個 dispatch() 方法發送 action 更改 State;提供一個 subscribe() 方法注冊回調函數監聽 State 的更改

嚴格的單向數據流是 Redux 架構的設計核心。store.dispatch(action) -> reducer(state, action) -> store.getState() 構成了一個“單向數據流”。

Redux 應用中數據的生命周期遵循下面 4 個步驟:

調用 store.dispatch(action)。
Redux store 調用傳入的 reducer 函數。
根 reducer 應該把多個子 reducer 輸出合并成一個單一的 state 樹。
Redux store 保存了根 reducer 返回的完整 state 樹。

Redux 與 Flux

Flux 是一種應用架構,或者說是一種思想,它跟 React 本身沒什么關系,它可以用在 React 上,也可以用在別的框架上。

微信小程序,小程序框架,Redux,組件


Flux 主要包括四個部分,Dispatcher、Store、View、Action,其中 Dispatcher 是 Flux 的核心樞紐,它相當于是一個事件分發器,將那些分散在各個組件里面的邏輯代碼收集起來,統一在 Dispatcher 中進行處理。

完整的 Flux 處理流程是這樣的:用戶通過與 view 交互或者外部產生一個 Action,Dispatcher 接收到 Action 并執行那些已經注冊的回調,向所有 Store 分發 Action。通過注冊的回調,Store 響應那些與他們所保存的狀態有關的 Action。然后 Store 會觸發一個 change 事件,來提醒 controller-views 數據已經發生了改變。Controller-views 監聽這些事件并重新從 Store 中獲取數據。這些 controller-views 調用他們自己的 setState() 方法,重新渲染自身以及組件樹上的所有后代組件。

Redux 的靈感來源于 Flux 的幾個重要特性,它可以看作是 Flux 的一種實現。和 Flux 一樣,Redux 規定,將模型的更新邏輯全部集中于一個特定的層,都不允許程序直接修改數據,而是用一個叫作 “action” 的普通對象來對更改進行描述。不同的是:

Redux 只有一個 store。 Flux 里面會有多個 store 存儲應用數據,并在 store 里面執行更新邏輯,當 store 變化的時候再通知 controller-view 更新自己的數據,Redux 將各個 store 整合成一個完整的 store,并且可以根據這個 store 推導出應用完整的 state。同時 Redux 中更新的邏輯也不在 store 中執行而是放在 reducer 中。
Redux 沒有 Dispatcher。Redux 中沒有 Dispatcher 的概念,它使用 reducer 來進行事件的處理,reducer 是一個純函數,這個函數被表述為 (previousState, action) => newState,它根據應用的狀態和當前的 action 推導出新的 state。Redux 中有多個 reducer,每個 reducer 負責維護應用整體 state 樹中的某一部分,多個 reducer 可以通過 combineReducers 方法合成一個根reducer,這個根reducer負責維護完整的 state,當一個 action 被發出,store 會調用 dispatch 方法向某個特定的 reducer 傳遞該 action,reducer 收到 action 之后執行對應的更新邏輯然后返回一個新的 state,state 的更新最終會傳遞到根reducer處,返回一個全新的完整的 state,然后傳遞給 view。

Redux使用

應用中所有的 state 都以一個對象樹的形式儲存在一個單一的 store 中。唯一改變 state 的辦法是觸發 action,一個描述發生什么的對象。
為了描述 action 如何改變 state 樹,需要編寫 reducers。

  1. // 這是一個 reducer,形式為 (state, action) => state 的純函數。 
  2. function counter(state = 0, action) {    switch (action.type) {      case 'INCREMENT':        return state + 1;      case 'DECREMENT':        return state - 1;      default:        return state; 
  3.   } 
  4. }  // 創建 Redux store 來存放應用的狀態 
  5. let store = createStore(counter);  // 可以手動訂閱更新,也可以事件綁定到視圖層。 
  6. store.subscribe(() =>    console.log(store.getState()) 
  7. );  // 改變內部 state 唯一方法是 dispatch 一個 action。 
  8. store.dispatch({ type: 'INCREMENT' }); // 輸出:1     
  9. store.dispatch({ type: 'INCREMENT' }); // 輸出:2 
  10. store.dispatch({ type: 'DECREMENT' }); // 輸出:1 

以上代碼,首先定義改變應用狀態的對象,這個對象被叫做 action,而不是直接改變 state。然后編寫專門的函數來決定每個 action 如何改變應用的 state,這個函數被叫做 reducer。

Redux只有一個單一的 store 和一個根級的 reduce 函數(reducer)。

隨著應用越來越大,一方面,不能把所有的數據都放到一個reducer里面,另一方面,為每個reducer創建一個store,后續store的維護就顯得比較麻煩。combineReducers 輔助函數的作用是,把一個由多個不同 reducer 函數作為 value 的 object,合并成一個最終的 reducer 函數,然后就可以對這個 reducer 調用 createStore。合并后的 reducer 可以調用各個子 reducer,并把它們的結果合并成一個 state 對象。state 對象的結構由傳入的多個 reducer 的 key 決定。

 
  1. // 創建兩個reducer 
  2.  function todos(state = [], action) {    switch (action.type) {      case 'ADD_TODO':        return state.concat([action.text])      default:        return state 
  3.    } 
  4.  }  function counter(state = 0, action) {    switch (action.type) {      case 'INCREMENT':        return state + 1 
  5.      case 'DECREMENT':        return state - 1 
  6.      default:        return state 
  7.    } 
  8.  }  // 將多個reducer合并成一個 
  9.  var combineReducers = require('../../lib/redux/redux').combineReducers;  var rootReducer = combineReducers({ 
  10.    todos, 
  11.    counter 
  12.  });  var createStore = require('../../lib/redux/redux').createStore;  var store = createStore(rootReducer);  console.log(store.getState())  // { 
  13.  //  counter: 0, 
  14.  //  todos: [] 
  15.  // } 
  16.  store.dispatch({ 
  17.    type: 'ADD_TODO'
  18.    text: 'Use Redux' 
  19.  });  // { 
  20.  //  counter: 0, 
  21.  //  todos: [ 'Use Redux' ] 
  22.  // } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美午夜xxx| 国产亚洲a∨片在线观看| 欧美性猛交xxxx乱大交蜜桃| 欧美日韩中文字幕综合视频| 在线观看日韩视频| 精品亚洲va在线va天堂资源站| 在线观看免费高清视频97| 成人午夜两性视频| 911国产网站尤物在线观看| xxxx欧美18另类的高清| 不卡伊人av在线播放| 亚洲精品福利资源站| 亚洲香蕉伊综合在人在线视看| 亚洲乱亚洲乱妇无码| 91精品国产免费久久久久久| 92看片淫黄大片看国产片| 国产97在线亚洲| 91精品国产91久久久久久| 欧美性生交大片免费| 国产精品白嫩美女在线观看| 欧美精品做受xxx性少妇| 国产一区二区三区直播精品电影| 国产在线精品播放| 久久久91精品国产| 国产精品久久久久免费a∨| 日韩欧美精品在线观看| 日韩最新中文字幕电影免费看| 亚洲va欧美va国产综合剧情| 亚洲最大在线视频| 亚洲色图17p| 亚洲一区二区三区四区视频| 影音先锋欧美在线资源| 久久高清视频免费| 亚洲三级免费看| 国产91精品高潮白浆喷水| 日韩欧美aⅴ综合网站发布| 精品亚洲男同gayvideo网站| 成人国产精品日本在线| 亚洲激情在线观看视频免费| 日韩禁在线播放| 国产日韩视频在线观看| 91网站在线看| 国产亚洲视频在线观看| 亚洲影院色在线观看免费| 欧美成人中文字幕| 中文字幕av日韩| 亚洲一区二区中文| 国产精品久久久久久亚洲调教| 久久香蕉精品香蕉| 日本在线精品视频| 色综合五月天导航| 久久伊人色综合| 久久久久久香蕉网| 国产精品视频一区二区高潮| 992tv成人免费影院| 国产精品久久久亚洲| 韩国一区二区电影| 亚洲男人天堂九九视频| 影音先锋欧美精品| 亚洲免费福利视频| 亚洲欧美日韩区| 欧美高清在线视频观看不卡| 久久伊人91精品综合网站| 91中文精品字幕在线视频| 韩国视频理论视频久久| 成人免费xxxxx在线观看| 中文字幕自拍vr一区二区三区| 国产精品video| 久久99久久99精品中文字幕| 欧美在线一级va免费观看| 日韩免费电影在线观看| 日韩av免费在线看| 欧美在线免费观看| 久久久999国产精品| 精品久久久久久久大神国产| 日韩电影中文字幕在线观看| 久久精品成人欧美大片古装| 91禁国产网站| 亚洲精品美女久久久久| 欧美激情精品久久久久久久变态| 欧美丰满少妇xxxx| 亚洲精品欧美一区二区三区| 欧美大秀在线观看| 91av福利视频| www国产精品视频| 精品露脸国产偷人在视频| 高清欧美性猛交| www.日韩欧美| 日韩中文字幕视频在线观看| 日韩av在线免费观看| 日本成人精品在线| 日韩av在线免费看| 日韩av在线直播| 九九九久久国产免费| 国产亚洲日本欧美韩国| 成人观看高清在线观看免费| 国产精品99导航| 97视频在线观看视频免费视频| 日韩亚洲第一页| 国产精品www| 成人有码在线播放| 国产狼人综合免费视频| 亚洲最大激情中文字幕| 亚洲一区二区少妇| 久久久久久这里只有精品| 亚洲999一在线观看www| 一本色道久久综合狠狠躁篇的优点| 欧美成人在线免费视频| 亚洲激情视频网站| 久久综合五月天| 尤物精品国产第一福利三区| 91日本在线视频| 91高潮在线观看| 美女啪啪无遮挡免费久久网站| 亚洲精品久久久久中文字幕二区| 久久视频在线看| 亚洲福利视频免费观看| 国产精品久久久久免费a∨| 久久资源免费视频| 国产精品黄页免费高清在线观看| 欧美电影在线免费观看网站| 午夜精品一区二区三区视频免费看| 国产成人精品免高潮费视频| 久久久黄色av| 日韩av最新在线观看| 亚洲网址你懂得| 97国产真实伦对白精彩视频8| 清纯唯美亚洲激情| 国产欧美一区二区三区久久| 日韩电影第一页| 日韩成人在线观看| 成人网页在线免费观看| 丝袜美腿精品国产二区| 欧美自拍视频在线| 国产一区二区在线播放| 国产欧美久久久久久| 国产一区二区欧美日韩| 国产精品女人网站| 色综合影院在线| 亚洲欧美国产精品专区久久| 91精品久久久久久久久中文字幕| 欧美激情xxxxx| 欧美日韩免费区域视频在线观看| 久久精品亚洲国产| 最好看的2019年中文视频| 第一福利永久视频精品| 欧美国产日韩一区二区| 欧美一二三视频| 精品国产一区二区三区久久久| 一区二区成人av| 精品爽片免费看久久| 久久影视电视剧凤归四时歌| 欧美视频不卡中文| 国产69精品久久久| 久久久久久久国产精品视频| 亚洲xxxx18| 国产成人精品国内自产拍免费看| 国产一区二区美女视频| 国产一区欧美二区三区| 成人免费在线视频网址| 精品久久香蕉国产线看观看亚洲| 亚洲缚视频在线观看| 欧美亚洲视频一区二区| 久久精品视频一|