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

溫馨提示×

溫馨提示×

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

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

在React中如何使用Redux

發布時間:2021-12-02 17:51:52 來源:億速云 閱讀:183 作者:小新 欄目:網絡安全

這篇文章主要介紹在React中如何使用Redux,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

修復遺留問題

  1. webpack.prod.config.js中缺少了對path庫的引用,執行構建npm run build:prod的時候失敗。在文件開始的地方引入node.js的path庫就可以了。

  2. package.json里面定義了一個build:dev的腳本,這個腳本其實有點多余,不過有時候需要打包測試版本的文件,所以還是需要存在。主要有個問題是webpack.dev.config.js中output節點下錯誤定義了path的值為根目錄'/',這在使用npm start命令啟動運行時打包的時候看不出問題,但是在使用npm run build:dev時會出現無法寫文件到根目錄的權限錯誤。只要把path的值改掉就可以。path: config.publicPath改成path: config.staticPath,publicPath: config.publicPath

  3. css-loader和less-loader導出的樣式類名太長,還是把localIdentName中的path部分去掉比較好看。

redux

安裝redux

安裝依賴的命令如下:

npm install --save redux react-redux redux-thunk  
npm install --save-dev redux-logger

redux不用說了,我是把它當成一個本地數據庫使用,react-redux幫助你完成數據訂閱,redux-thunk可以放你實現異步action,redux-logger是redux的日志中間件。

關于redux與代碼布局

在開始介紹之前我想先就redux的使用發表一些自己的看法:

前文說了我把redux當成一個本地數據庫,因此我傾向于把redux封裝類似于mvc中的Model的角色,獨立為一層。這與另一種觀點——我在公司的項目更傾向于把每個頁面當成一個獨立模塊,每個模塊維護自己的reducer和action的觀點,有所出入。

我的做法可以更好地實現reducer的復用。而對我自己來說更重要的好處是集中修改。更適合小項目或者獨自開發一個項目的場景。

我公司的項目的做法對多人協同開發更有利,畢竟每個人維護好自己的代碼就可以了。公司項目的這種方法有幾個問題讓我比較難以接受:

第一個是模塊越多reducer和action的定義越多,很多時候這些代碼都是差不多的。

更重要的是第二個問題:模塊數據在store里面的存儲是直接在根state下面排列下來的,根state的數據格式樣式有點像這樣:

在React中如何使用Redux

{
    aModuleData:{...},
    bModuleData:{...},
    cModuleData:{...},
    dModuleData:{...},
    ...
}

在React中如何使用Redux

項目的原意是希望每個模塊的保持獨立,但實際上使用的時候卻是有極大的可能出現aModule同時使用aModuleData和bModuleData的情況。這跟每個人維護自己的代碼的初衷有悖,也沒有發揮好redux的真正能力。

還有一個小問題是reducer的組織通常影響著應用數據state的樣式,把reducer分散到每個模塊之后,state的形式在代碼上很難直管地反映出來,特別是當模塊是動態加載的時候更甚。不過借助logger等工具可以解決。

關于這塊的爭議Redux的教程中有提及。

使用redux

無論代碼怎么布局,使用redux的方法主要還是三步曲:創建store、創建action、創建reducer。而在這之后才是與業務或者組件相關的數據處理和展示。

先看一下我的做法的代碼布局:

創建store的代碼集中在model/index.js中,model/actions/.js和model/reducer/.js里面分別是寫action創建函數和reducer函數的地方,根據模塊可以自己DIY。

model/index.js的代碼如下:

model/actions/index.js的代碼如下:

這里定義了一個名叫login的異步actionCreator以及三個普通的actionCreator。

actionCreator被某個組件調用后會向store發送action,然后被reducer處理,reducer定義在model/reducers/index.js中,代碼如下:

這就完成了三步曲了。上面的代碼簡單地模擬了登錄的動作。登錄頁面用到的數據存放在loginPageData中,登陸后獲取到的當前登錄用戶數據存儲在實體數據entities中。

接下來要把redux和react聯系起來,也就是把redux的store中的數據交給react的組件使用。

第一步需要掛載redux的store到react,為react提供數據支持。最簡單的做法是找到應用的根組件(我這里是BasicExample.js),然后在它的render函數中最外層添加Providor標簽。代碼片段如下:

紅線部分畫出了改動點,從model/index.js中導出了store對象,通過react-redux提供的Providor標簽掛載到react中,為react提供數據支持。

看最后的紅線中,我們在Home組件里面添加了這次的測試例子ReduxDemo。它的代碼如下:

代碼的重點在connect函數。這個函數也是由react-redux提供的。使用它可以包裝普通的展示組件(這里是ReduxDemo——只負責展示數據),然后返回一個容器組件。connect函數通過第一個參數讓展示組件訂閱了來自store的數據;通過第二個參數讓展示組件默認可以dispatch各種action。

這個例子在ReduxDemo掛載完成后調用login接口模擬登陸。返回結果被塞到store中(數據格式由先前寫好的reducers的組織方式決定)。頁面根據store中的數據展示內容。由于login發出的遠程請求是假的,所以這里總是失敗,因此會顯示失敗的內容。

關于redux的使用介紹到此結束。

redux輔助庫

其實在上面的代碼中我已經悄悄地提及了兩個輔助庫,也是我想在這里推薦的兩個庫:

  1. 開發工具redux-devtools:結合各種其他庫可以實現可視化的調試界面。

  2. 數據規范化工具normalizr:規范化組織數據。經過三個項目的體驗后,個人非常推薦使用這個庫,可以讓應用的數據組織更清晰、減少冗余數據、減少因數據刷新導致的性能影響。

以上是“在React中如何使用Redux”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

济阳县| 阿克苏市| 报价| 汕尾市| 葵青区| 定边县| 明水县| 鲁山县| 德江县| 渝北区| 泉州市| 吴旗县| 长兴县| 阳春市| 视频| 阳泉市| 原阳县| 玛纳斯县| 凌海市| 榕江县| 新源县| 高尔夫| 大连市| 建昌县| 栾城县| 乌苏市| 益阳市| 曲阜市| 泽库县| 祁连县| 十堰市| 土默特左旗| 阿合奇县| 平果县| 铁力市| 吐鲁番市| 永兴县| 沧源| 三台县| 方山县| 新兴县|