react中間件的thunk和saga差別是什麼
react中間件的thunk和saga區別:1、【redux-thunk】僅支援原始物件【(plain object)】,處理有副作用的action;2、【redux-saga】中處理了所有的非同步操作, 非同步介面部分一目了然。
本教學操作環境:windows7系統、React17版,此方法適用於所有品牌電腦。
相關學習推薦:react影片教學
#react中間件的thunk和saga區別:
react中間件的thunk和saga區別:
1、redux-thunk 的使用與缺點
(1)redux-thunk 的使用thunk 是redux 作者給出的中間件, 實作極為簡單, 10 多行程式碼:function createThunkMiddleware(extraArgument) { return ({ dispatch, getState }) => next => action => { if (typeof action === 'function') { return action(dispatch, getState, extraArgument); } return next(action); }; } const thunk = createThunkMiddleware(); thunk.withExtraArgument = createThunkMiddleware; export default thunk;
action(dispatch, getState, extraArgument);
import { createStore, applyMiddleware, compose } from 'redux'; import thunk from 'redux-thunk'; import rootReducer from './reducers/index'; const initialState = {}; const middleware = [thunk]; export const store = createStore( rootReducer, initialState, compose( applyMiddleware(...middleware), Windows.__REDUX_DEVTOOLS_EXTENSION__ && Windows.__REDUX_DEVTOOLS_EXTENSION__() ) );
import { FETCH_POSTS, NEW_POST } from './type' export const fetchPosts = () => dispatch => { fetch("https://jsonplaceholder.typicode.com/posts") .then(res => res.JSON()) .then(posts => dispatch({ type: FETCH_POSTS, payload: posts }) ) } export const createPost = postData => dispatch => { fetch("https://jsonplaceholder.typicode.com/posts",{ method: "POST", headers:{ "content-type":"application/json" }, body:JSON.stringify(postData) }) .then(res => res.JSON()) .then(post => dispatch({ type: NEW_POST, payload: post }) ) }
I)action 的形式不統一##II )就是非同步操作太為分散, 分散在了各個action 中
2、redux-saga 的使用
在redux-saga 中, action 是plain object(原始物件), 並且集中處理了所有的非同步操作, 下面我們以redux-saga 的官方例子shopping-cart
為例, 來說說redux-saga 的使用.
範例很簡單, 展示的是以下過程:
商品列表-->新增商品-->購物車-->付款
具體的頁面, 如下:
顯然, 這裡有兩個明顯的非同步操作需要執行:#取得商品清單和付款
用
和
checkout()來表示, 如果用thunk, 那麼這兩個非同步的操作分屬於兩個不同的action 中, 但是在saga 中, 它們是集中處理的.使用saga, 我們先生成一個集中處理異步的saga.JS 文件:
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>import { put, takeEvery, call } from &#39;redux-saga/effects&#39;
import { CHANGE_HITOKOTO_RESP, CHANGE_HITOKOTO } from &#39;../actions/Hitokoto&#39;
import hitokotoApi from &#39;../services/hitokoto&#39;
function gethitokoto() {
return hitokotoApi.get().then(resp => resp)
}
export function* changeHitokoto() {
const defaultHitokoto = {
&#39;id&#39;: 234,
&#39;hitokoto&#39;: &#39;没有谁能够永远坚强下去的, 每个人都会有疲累的无法站起的时候. 世间的故事, 就是为了这一刻而存在的哦.&#39;,
&#39;type&#39;: &#39;a&#39;,
&#39;from&#39;: &#39;文学少女&#39;,
&#39;creator&#39;: &#39;酱七&#39;,
&#39;created_at&#39;: &#39;1468605914&#39;
};
try {
const data = yield call(gethitokoto);
const hitokotoData = JSON.parse(data);
yield put({ type: CHANGE_HITOKOTO_RESP, hitokotoData });
} catch (error) {
yield put({ type: CHANGE_HITOKOTO_RESP, hitokotoData: defaultHitokoto });
}
}
export default function* shici() {
yield takeEvery(CHANGE_HITOKOTO, changeHitokoto)
}</pre><div class="contentsignin">登入後複製</div></div>
拋去其他部分(具體用法我們待會解釋), 我們看到在saga.JS 中集中了這兩個非同步操作
和
checkout()此外, 在saga 中的action 跟原始物件是完全相同的, 我們來看saga 中的action creator :
export const GET_ALL_PRODUCTS = 'GET_ALL_PRODUCTS' export function getAllProducts() { return { type: GET_ALL_PRODUCTS, } }
上述的action creator 中, 創建的action 是一個plain object, 跟我們在redux 中同步action 的樣式是統一的.
redux-saga 的優缺點
優點:
(1)集中處理了所有的非同步運算, 非同步介面部分一目了然
(2)action 是普通物件, 這跟redux 同步的action 一模一樣
(3)透過Effect, 方便非同步介面的測試
(4)透過worker 和watcher 可以實現非阻塞非同步呼叫, 並且同時可以實現非阻塞呼叫下的事件監聽
#(5) 非同步操作的流程是可以控制的, 可以隨時取消對應的非同步操作.javascript學習教學############# 缺點: 太複雜, 學習成本較高相關學習推薦:
以上是react中間件的thunk和saga差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

如何利用React和WebSocket建立即時聊天應用程式引言:隨著網路的快速發展,即時通訊越來越受到人們的關注。即時聊天應用程式已成為現代社交和工作生活中不可或缺的一部分。本文將介紹如何利用React和WebSocket建立一個簡單的即時聊天應用,並提供具體的程式碼範例。一、技術準備在開始建立即時聊天應用之前,我們需要準備以下技術和工具:React:一個用於構建

React前後端分離指南:如何實現前後端的解耦和獨立部署,需要具體程式碼範例在當今的Web開發環境中,前後端分離已經成為一種趨勢。透過將前端和後端程式碼分開,可以讓開發工作更加靈活、高效,並且方便進行團隊協作。本文將介紹如何使用React實現前後端分離,從而實現解耦和獨立部署的目標。首先,我們要先理解什麼是前後端分離。傳統的Web開發模式中,前端和後端是耦合在

如何利用React和Flask建構簡單易用的網路應用引言:隨著網路的發展,網路應用的需求也越來越多樣化和複雜化。為了滿足使用者對於易用性和效能的要求,使用現代化的技術堆疊來建立網路應用變得越來越重要。 React和Flask是兩個在前端和後端開發中非常受歡迎的框架,它們可以很好的結合在一起,用來建立簡單易用的網路應用。本文將詳細介紹如何利用React和Flask

如何利用React和RabbitMQ建立可靠的訊息傳遞應用程式引言:現代化的應用程式需要支援可靠的訊息傳遞,以實現即時更新和資料同步等功能。 React是一種流行的JavaScript庫,用於建立使用者介面,而RabbitMQ是一種可靠的訊息傳遞中間件。本文將介紹如何結合React和RabbitMQ建立可靠的訊息傳遞應用,並提供具體的程式碼範例。 RabbitMQ概述:

React響應式設計指南:如何實現自適應的前端佈局效果隨著行動裝置的普及和使用者對多螢幕體驗的需求增加,響應式設計成為了現代前端開發的重要考量之一。而React作為目前最受歡迎的前端框架之一,提供了豐富的工具和元件,能夠幫助開發人員實現自適應的佈局效果。本文將分享一些關於使用React實現響應式設計的指南和技巧,並提供具體的程式碼範例供參考。使用React的Fle

React程式碼偵錯指南:如何快速定位並解決前端bug引言:在開發React應用程式時,經常會遇到各種各樣的bug,這些bug可能會使應用程式崩潰或導致不正確的行為。因此,掌握調試技巧是每個React開發者必備的能力。本文將介紹一些定位和解決前端bug的實用技巧,並提供具體的程式碼範例,幫助讀者快速定位和解決React應用程式中的bug。一、調試工具的選擇:在Re

ReactRouter使用指南:如何實現前端路由控制隨著單頁應用的流行,前端路由成為了一個不可忽視的重要部分。 ReactRouter作為React生態系統中最受歡迎的路由庫,提供了豐富的功能和易用的API,使得前端路由的實作變得非常簡單和靈活。本文將介紹ReactRouter的使用方法,並提供一些具體的程式碼範例。安裝ReactRouter首先,我們需要

如何利用React和GoogleBigQuery建立快速的資料分析應用引言:在當今資訊爆炸的時代,資料分析已經成為了各產業中不可或缺的環節。而其中,建構快速、有效率的資料分析應用則成為了許多企業和個人追求的目標。本文將介紹如何利用React和GoogleBigQuery結合來建立快速的資料分析應用,並提供詳細的程式碼範例。一、概述React是用來構建
