之前我們使用redux-thunk 把非同步**放到了action 裡面,這個解決了自動化測試的一些問題以及**的拆分管理。
redux-saga 也是做非同步**拆分的中介軟體,可以把它將 redux-thunk 互換。
我們要使用redux-saga,先把之前redux-thunk 相關**刪掉。
然後,我們在github 上找到 redux-saga :
yarn add redux-saga
安裝好啦後,我們就開始使用了。首先在store 檔案中,引入並使用,如下。
// import thunk from 'redux-thunk';
import reducer from './reducer';
import createsagamiddleware from 'redux-saga';
import mysaga from './sagas';
const sagamiddleware = createsagamiddleware()
const store = createstore(
reducer,
);sagamiddleware.run(mysaga);
export default store;
然後,我們在store 資料夾下新建乙個sagas.js ,我們把非同步**都放這兒。
我們先把github 上 sagas.js 中後面幾行**拷到 sagas.js (必須有乙個函式是generator函式)中,如下。
function* mysaga()
export default mysaga;
下面,我們要將元件中axios 非同步**,移到sagas.js 中,
首先,我們建立乙個action 模版把
export const getinitlistaction = () => ()
然後在元件中使用,並傳給redux
componentdidmount()
然後呢,在傳給store之前,我們在saga中處理它,進入sagas.js 檔案,進行修改:(下面的意思是,saga 只要捕獲到 get_init_list 就會執行 fetchuser方法)
import from 'redux-saga/effects';
import from './actiontypes';
function* mysaga()
export default mysaga;
下面我們來寫乙個fetchuser方法,如下。 fetchuser 方法可以是普通方法也可以是gennerator 方法,建議寫generator 方法。
import from 'redux-saga/effects';
import store from './index.js';
import from './actiontypes';
import axios from 'axios';
import from './actioncreators';
function* initlist () ).then((res) => )
}function* mysaga()
export default mysaga;
上面**,好像沒問題,但是redux-saga 給我們提供了put 方法,就不用store 的dispatch 了,如下。【在generator 函式 裡,做非同步請求的話,就不要用promise了,完全可以用yield】
import from 'redux-saga/effects';
import from './actiontypes';
import axios from 'axios';
import from './actioncreators';
function* initlist ()
function* mysaga()
export default mysaga;
我們可以給 yield 加乙個try 如下。
function* initlist () catch(e)
}
然後元件中只需要如下**。即可使用非同步**。
componentdidmount()
done redux saga 中介軟體
話不多說,先上原始碼,中介軟體意味著要滿足redux中介軟體正規化 next action return next action const result next action hit reducers sagaemitter.emit action return result 後面主要研究 sa...
中介軟體 訊息中介軟體學習總結
冪等 在程式設計中.乙個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。冪等函式,或冪等方法,是指可以使用相同引數重複執行,並能獲得相同結果的函式。這些函式 不會影響系統狀態,也不用擔心重複執行會對系統造成改變。例如,getusername 和settrue 函式就是乙個冪等函式....
中介軟體作業
主要檔案的 fctrl client linux.c this is sample code generated by rpcgen.these are only templates and you can use them as a guideline for developing your ow...