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

  效率如下:

  

  

   

   

 .

原文地址:https://www.cnblogs.com/jianxian/p/12498252.html