日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一个插件让你在 Redux 中写 promise 事半功倍

發布時間:2025/4/16 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个插件让你在 Redux 中写 promise 事半功倍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Redux 的應用給我們開發帶來了很多便利,讓組件間交互不再那么復雜,但 Redux 也有它的短板,我們知道要通過 Redux 改變一個 state 需要定義 actionType→action→reducer,這使得有時候一個很簡單的交互都需要寫一堆代碼,我們今天要介紹的這個小插件可以讓這個工作變得更加簡潔、優雅。

它就是:redux-promise-middleware,這是一個 Redux 的 middleware,引入項目的方式和其他的 redux middleware 一樣,具體可以查看它的官方文檔,這里就不再贅述。

舉個典型的例子,通過 Redux 中發起一次登錄請求,這個請求的 promise 會有3種狀態需要我們處理,分別是 pending、resolve、reject,在 pending 的時候頁面要顯示等待狀態,resolve 的時候要顯示請求成功,reject 的時候要提示用戶請求失敗,我們先通過對比來看一下用了這個組件之后代碼是什么樣子:

actionType.js

使用前:

export const LOGIN_PENDING = 'LOGIN_PENDING'; export const LOGIN_RESOLVE = 'LOGIN_RESOLVE'; export const LOGIN_REJECT = 'LOGIN_REJECT'; 復制代碼

使用后:

export const LOGIN = 'LOGIN'; 復制代碼

只需要寫一個?是的,讓我們往下看。

action.js

使用前:

import * as at from 'actionType';export const login = (username, password) => async dispatch => {dispatch({ type: at.LOGIN_PENDING });try {const resp = await axios.post(URL_LOGIN, { username, password });dispatch({type: at.LOGIN_RESOLVE,result: resp});} catch(e) {dispatch({type: at.LOGIN_REJECT,message: e.message});} } 復制代碼

使用后:

import * as at from 'actionType';export const login = (username, password) => ({type: at.LOGIN,payload: axios.post(URL_LOGIN, { username, password }) }); 復制代碼

寫完了?沒錯,就是這么簡單。那等待和失敗的處理在哪里呢?別急,咱們繼續往下看。

reducer.js

使用前:

import * as at from 'actionType';export default (state, action) => {switch (action.type) {case at.LOGIN_PENDING:// 顯示等待圖標case at.LOGIN_RESOLVE:// 顯示登錄成功case at.LOGIN_REJECT:// 顯示登錄失敗} } 復制代碼

使用后:

import { PENDING, FULFILLED, REJECTED } from 'redux-promise-middleware'; import * as at from 'actionType';export default (state, action) => {switch (action.type) {case `${at.LOGIN}_${PENDING}`:// 顯示等待圖標case `${at.LOGIN}_${FULFILLED}`:// 顯示登錄成功case `${at.LOGIN}_${REJECTED}`:// 顯示登錄失敗} } 復制代碼

正如你所看到的,用了這個 middleware 后,一個帶有 promise 的 action 會被包裝成三個狀態為后綴的 action 發給 reducer,并且此時 action.payload 中的值已經是 promise 執行后返回的結果,然后我們只需要拿 payload 的值分別操作 state 就行了??吹竭@里你應該覺得,嗯,這個插件確實能讓人少寫不少代碼,但是反應快的朋友看了之后可能又有疑問了——在 action 里面只返回一個 type 和 payload 的對象,這在處理一個請求的時候確實沒問題,那假如我在 login 之后緊接著又要 dispatch 另外一個 action 怎么辦呢?

這個時候我們可以這樣寫:

import * as at from 'actionType';export const login = (username, password) => dispatch => {dispatch({type: at.LOGIN,payload: axios.post(URL_LOGIN, { username, password })}).then(() => dispatch(afterLogin())); } 復制代碼

從筆者的使用經歷來看,以上的寫法基本能滿足絕大多數的場景,此時有的同學可能依然有疑問——這個 middleware 這么擅自主張的就對 action 進行了改裝,會不會對項目的入侵太大?如果我的項目已經進行到一半,再引入它會不會讓我以前寫的 action 無法正常被 reducer 接收到?這個答案讓我們到它的源碼中去尋找:

打開它的倉庫地址,我們會發現它的代碼很少,只有兩個文件:index.js和isPromise.js,isPromise.js 定義了一個工具方法用來判斷一個對象是否是一個 promise,這里就不再多講。主要的邏輯在 index.js 中,為了節約你的時間,我們用一個流程圖去大概描述它的邏輯:

值得一提的是,因為它是一個 Redux 的 middleware,返回 意味著將 action 傳遞給下一個 middleware,直到傳遞到 reducer 中。從圖中可以看出,如果你不是按照它規定的格式書寫 action,它會直接透傳出去,因此它并不會對項目造成什么副作用(除非你以前的 action 中的對象就是有叫 payload 的屬性,并通過 payload 直接把一個 promise 對象發給了 reducer,這種本身也是不規范的寫法)。

除了文章中講到的這些,redux-promise-middleware 還有許多其他的使用技巧幫助我們提高編碼效率,同時很多屬性也支持自定義,比如代表三種狀態的 action 的后綴等等,感興趣的同學可以下來自行閱讀官方文檔。


關注微信公眾號:創宇前端(KnownsecFED),碼上獲取更多優質干貨!

總結

以上是生活随笔為你收集整理的一个插件让你在 Redux 中写 promise 事半功倍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99热一区二区 | 另类天堂网 | 国产成人亚洲精品无码h在线 | 在线看三级 | 亚洲国产精品久久久久爰色欲 | 久久青青草视频 | 色偷偷免费费视频在线 | 欧美日韩亚洲精品一区二区 | 亚洲一二三区在线观看 | 日韩国产91 | 91在线精品一区二区三区 | 午夜精品视频 | 神秘马戏团在线观看免费高清中文 | youjizz麻豆 | 北条麻妃在线一区二区 | 国产成人无码精品久久久电影 | 午夜影院日本 | 亚洲色图久久 | 久久久久无码精品国产sm果冻 | 亚洲自拍av在线 | 永久av| 午夜影院在线观看 | 久久久国产精华液999999 | 男人靠女人免费视频网站 | 国产suv精品一区二区60 | 国产精品久久久久久99 | 高跟91娇喘 | 天天干天天弄 | 久久人人插 | 亚洲欧美日韩在线一区 | 成年女人免费视频 | 在线观看黄色小视频 | 久久久香蕉视频 | 天天色棕合合合合合合合 | 亚洲欧美自拍偷拍 | 亚洲欧美日韩精品久久亚洲区 | 国产在线午夜 | 黄色在线免费播放 | 少妇又白又嫩又色又粗 | 久久久久99精品成人片我成大片 | 伊人av网站 | 国产视频一区二区三区四区 | 日韩短视频 | 欧美乱码精品一区二区三区 | 亚洲a级片 | 日韩av在线看 | 欧美鲁鲁 | 日本午夜电影网站 | 一起草视频在线播放 | 九九热精品视频在线 | 一级特级黄色片 | 国产精品久久久久电影 | 日本少妇激情舌吻 | 高清日韩一区 | 成人小视频在线看 | 中日韩精品视频 | 免费一级全黄少妇性色生活片 | 亚洲激情五月婷婷 | 色综合天天综合网天天看片 | 天天综合视频 | 69pao| 女同性做受全过程动图 | 天啪| 国产欧美成人 | 国产日韩一区二区在线观看 | 黄色成人在线网站 | 涩涩999| 日韩美女福利视频 | 老女人乱淫 | 六月丁香激情网 | 一级黄色免费片 | 理论片久久 | 九九热最新网址 | 久久国产精品电影 | 完美搭档在线观看 | 国内免费av | 精品国产一二三 | 久久久久成人网站 | 精品视频一二 | 国产一级二级毛片 | 欧美成人免费网站 | 精品无码久久久久久久久 | 一本一道久久a久久精品综合 | 免费婷婷 | www中文在线 | 在线免费观看成年人视频 | 中国性老太hd大全69 | 成人免费毛片片v | 久久123| porn国产| 国产美女视频免费观看下载软件 | 日本午夜啪啪 | 国产精品区一区二区三 | 国产按摩一区二区三区 | 欧美黄色免费 | www.五月天com | 日韩精品aaa| 日本五十肥熟交尾 | 激情超碰在线 |