Redux中间件redux-saga中间件之安装、配置、使用
(1)前言
(2)安装
首先安装相关依赖
>npm i redux-saga --save
(3)配置
接下来开始进行编写配置,文件位置src/store/index.js。先将之前的redux中间件redux-thunk做下备份,然后开始配置redux-saga中间件
redux-saga中间件相对于redux-thunk中间件较为繁琐一点,该中间件的启动还需要依赖其他文件sages.js
接着创建src/sagas.js并开始编写配置
注意:该文件默认规定,需要使用ES6的Generator函数语法,如下所示
接着在store/index.js里启动saga
接下来先将组件里的action注释,测试下中间件的配置,查看是否完成
此时测试结果如下
控制台并没有报错,所以redux-saga中间件的配置到这里就算完毕,接下来开始使用中间件。
(4)使用
1、组件引入action,并调用action
2、在actionCreators.js里创建对应对象(之前的redux-thunk是导出方法),注意两者区别并导出
创建引入type
接下来在组件派发action
此时的基本配置和派发已经完成,测试如下,输出打印这里的action,剩余就剩下业务逻辑的操作。
编写redux-saga业务逻辑,位置store/sagas.js
Generator函数内部需要监听,而监听需要引入takeEvery方法,如下所示
接着传入参数,如下所示
含义:
执行GET_MY_LIST时候,执行另一个方法getList,接下来编写该方法,同理使用ES6的Generator语法
接下来浏览器进行测试,查看控制台是否输出打印,如果有则说明捕获成功.
此时可以判断出已经捕获成功,接下来开始在里面进行业务逻辑处理,获取数据即可。
这里需要引入一些方法,且派发action不再需要store.dispatch(),而是yield put()进行派发
完整代码如下:
import {takeEvery,put} from 'redux-saga/effects' import axios from 'axios' import {getListAction} from './actionCreators' import {GET_MY_LIST} from './actionTypes' /** Generator为ES6语法,主要用于异步处理 */ function* mySaga(){ yield takeEvery(GET_MY_LIST,getList)//等待监听 } function* getList(){ console.log('运行了saga下的getList') const res = yield axios.get('/sug?code=utf-8&q=帽子') const action = getListAction(res.data.result) yield put(action) /* axios.get('/sug?code=utf-8&q=帽子') .then((res)=>{ const data = res.data.result 创建action对象 const action = getListAction(data) 通过dispatch将action传递给store---注入action到store store.dispatch(action) }).catch((error)=>{ console.log(error) }) */ } export default mySaga
效率如下:
.