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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redux异步action_redux-thunk 和 redux-saga 的区别?

發(fā)布時間:2025/3/19 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redux异步action_redux-thunk 和 redux-saga 的区别? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

毋庸置疑,如果需要用到 side effect 異步操作,redux-thunk 和 redux-saga 絕對是目前兩個最受歡迎的中間件插件。那么他們之間最主要的區(qū)別是什么?

這就要首先說一說使用 redux 時異步操作出現(xiàn)的具體時機(jī)。

如下如所示,當(dāng)出發(fā)一個 action 會經(jīng)過中間件 middlewares,這時所有的 side effect 操作,例如調(diào)用 api 獲取數(shù)據(jù)等等都將在這里完成。然后再經(jīng)由 reducer 更新 state,最后傳遞到 view 完成 MVC 的數(shù)據(jù)流循環(huán)。

所有的調(diào)取數(shù)據(jù)都在 api 那部分完成

redux-thunk 解決方案

首先 thunk 來源自 think 的”過去式“ -- 作者非常特別的幽默感。主要意思就是聲明一個函數(shù)來代替表達(dá)式,這樣就可以將執(zhí)行求值操作(evaluation)延遲到所需要的時刻。

// calculation of 1 + 2 is immediate // x === 3 let x = 1 + 2;// calculation of 1 + 2 is delayed // foo can be called later to perform the calculation // foo is a thunk! let foo = () => 1 + 2;

注冊插件很簡單,大致代碼如下

// Note: this API requires redux@>=3.1.0 const store = createStore(rootReducer, applyMiddleware(thunk));ReactDOM.render(<Provider store={store}><Routes /></Provider>,document.getElementById('root') );

Reducer 也非常簡單,和原來一模一樣

export default (state = defaultState, action) => {switch (action.type) {case REMOTE_DATA_RECEIVED:return {...state,data: action.data};default:return state;} };

不同之處在于 action,普通的 action 大多長這樣

export function toggleTodo(index) {return { type: TOGGLE_TODO, index } }

而 redux-thunk 的 action 可以是一 異步的 higher order function 高階函數(shù)

export const fetchData = args => async (dispatch, getState) => {const state = getState();const url = 'https://jsonplaceholder.typicode.com/users/' + args;try {const response = await fetch(url).then(resp => {return resp;}).then(resp => resp.json());dispatch({type: REMOTE_DATA_RECEIVED,data: response});} catch (error) {console.log(error);} };

其他的地方關(guān)于 view 等都是一樣的操作。

redux-saga 解決方案

注冊插件大家都很類似

import { createStore, applyMiddleware } from 'redux'; import createSagaMiddleware from 'redux-saga'; import rootReducer from './root-reducer'; import { watchFetchSaga } from './saga/fetchData.saga';const sagaMiddleware = createSagaMiddleware(); const store = createStore(rootReducer, applyMiddleware(sagaMiddleware)); sagaMiddleware.run(watchFetchSaga);...

但是 saga 使用的仍然是普通的 action

// 這個 action 將由 saga 監(jiān)聽,并且出發(fā) side effect 異步加載 api 操作 export const fetchData = () => ({type: "START_FETCH_DATA" });// 這個 action 將由 saga 發(fā)出 export const fetchSuccess = data => ({type: "REMOTE_DATA_RECEIVED",payload: data });

接下來就是注冊 saga 相關(guān) side effect 操作。下面的文件是 fetchData.saga.js

import { takeLatest, put } from "redux-saga/effects";function* fetchDataSaga(action){try {const response = yield fetch(action.url);const data = yield response.json()yield put(fetchSuccess(data));} catch (error) {console.log(error);} }export default function* watchFetchSaga(){// saga 將監(jiān)聽此事件,takeLatest 表示僅僅只監(jiān)聽最新的此事件yield takeLatest("START_FETCH_DATA", fetchDataSaga) }

總結(jié)

可以看到 saga 自己基本上完全弄了一套 asyc 的事件監(jiān)聽機(jī)制。雖然好的一方面是將來可以擴(kuò)展成 worker 相關(guān)的模塊,甚至可以做到 multiple threads 同時執(zhí)行,但代碼量大大增加。如果只是普通的 application,用 redux-thunk 足夠。

redux-thunk 是 2015-7-13 發(fā)布的第一個版本,而 redux-saga 是 2015-12-2 發(fā)布的第一個版本。他們基本上都是在同一年被創(chuàng)造出來。

下面是兩者周下載量。

redux-thunk

redux-saga

除了上面的數(shù)據(jù)我再來說說自己的使用感受。這兩款插件我均正式使用過,而且都是用于商業(yè)軟件開發(fā)。從我自己的使用體驗(yàn)來看 redux-thunk 更簡單,和 redux 本身聯(lián)系地更緊密。尤其是整個生態(tài)都向函數(shù)式編程靠攏的今天,redux-thunk 的高階函數(shù)看上去更加契合這個閉環(huán)。

如果有的選,我肯定選 redux-thunk。因?yàn)?/p>

1)簡單才是王道

2)從名字本身上來看也更性感

你會怎么選?歡迎留言告訴我你的想法。

總結(jié)

以上是生活随笔為你收集整理的redux异步action_redux-thunk 和 redux-saga 的区别?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩啪啪 | 国产精品一区二区三区在线播放 | 麻豆视频免费观看 | 国产av无码专区亚洲av | 国产激情av一区二区三区 | 欧美不卡在线视频 | 黑人黄色片 | 欧美日韩国产精品一区 | 深夜福利一区 | 综合久久综合久久 | 日韩在线视频你懂的 | 性欢交69精品久久久 | 制服丝袜在线看 | 新超碰在线 | 国产超碰人人模人人爽人人添 | 光棍影院手机版在线观看免费 | 91视频地址 | 新版红楼梦在线高清免费观看 | 三级国产在线 | 精品国产无码AV | 一级网站在线观看 | 日韩经典在线观看 | 在线观看国产福利 | 电家庭影院午夜 | 国产原创精品 | 日韩高清二区 | 最近中文字幕第一页 | 狠狠狠狠狠 | 国产一区二区三区视频在线播放 | 最全aⅴ番号库 | 超碰成人av | 97人人爽人人爽人人爽人人爽 | 男生插女生视频在线观看 | 欧美插插视频 | 亚洲成在线观看 | 淫妹妹影院 | 夜夜嗨av禁果av粉嫩avhd | 欧美老熟妇乱大交xxxxx | 天海翼一区 | 无码人妻一区二区三区精品视频 | 欧州一区二区三区 | 亚洲免费中文字幕 | 99免费观看 | 亚洲综合在线五月 | 91av网址| 五月天婷婷丁香 | 国产欧美日韩免费 | 2021天天干| 少妇又色又紧又黄又刺激免费 | 激情伊人五月天 | 91精品国产乱码久久 | 日本视频精品 | 亚洲国产97 | 日本精品在线观看 | 在线精品视频播放 | 国产成人精品一区二区三 | 波多野结衣视频免费在线观看 | av在线免费播放网站 | 欧美午夜理伦三级在线观看 | 亚洲日本精品一区 | 清纯唯美亚洲综合 | 天天综合永久入口 | 少妇高潮毛片色欲ava片 | 在线观看网页视频 | 国产91av在线 | 狠狠看 | 麻豆av一区 | 女人下面流白浆的视频 | 国产精品啪啪啪视频 | 国产裸体永久免费视频网站 | 国产一级二级三级在线 | 成人爽爽爽 | jlzzjlzzjlzz亚洲人 | 少女与动物高清版在线观看 | wwww欧美| 日韩激情电影在线 | 久久精品欧美一区 | 色呦呦一区二区 | 天天做天天干 | 国产成人免费看 | 黄色欧美视频 | 深夜视频在线观看免费 | 亚洲黄网在线 | 38激情 | 久久久久女人精品毛片九一 | 3d毛片| 精品国产一区二区三 | 免费观看日批视频 | 色老头在线一区二区三区 | 国产一区二区91 | 超碰一级片 | 美女又黄又免费的视频 | 91黄视频在线观看 | 人妻久久一区二区三区 | 深夜av| 久久久1 | 看中国毛片 | 精品少妇一区二区三区免费观看 | 国产特级av |