美文网首页
Redux-saga 中间件

Redux-saga 中间件

作者: 参商_70a0 | 来源:发表于2019-10-08 09:56 被阅读0次

    Redux-saga和thunk一样,可以进行异步代码的拆分。
    不同的是redux thunk是将异步代码放入action。
    而redux saga是将其放入外部的文件中处理。
    (1)和thunk一样配置store

    import {createStore, applyMiddleware} from "redux"
    import reducer from "./reducer"
    import createSagaMiddleware from 'redux-saga'
    这里就引入了外部的文件
    import mySaga from './sagas/sagas'
    // import thunk from "_redux-thunk@2.3.0@redux-thunk";
    const sagaMiddleware = createSagaMiddleware()
    
    const store=createStore(
       reducer,
       applyMiddleware(sagaMiddleware)
    )
    sagaMiddleware.run(mySaga)
    export default store;
    

    (2)编写sagas.js
    注:sagas中一定要导出generator函数
    当接受到action类型为“GET_SAGA_ACTION”
    运行fetchUser方法

    import { call, put, takeEvery, takeLatest } from 'redux-saga/effects'
    import {GET_SAGA_ACTION} from '../actionTypes' 
    import axios from 'axios'
    import {initListAction} from '../actionCreators'
    function* mySaga() {
        yield takeEvery(GET_SAGA_ACTION, fetchUser);
    }
    function* fetchUser(){
        try{
            const res= yield axios.get('https://5ddfa840-ac8e-4521-bb15-135d3d86de70.mock.pstmn.io/api/todoList') 
            const action=initListAction(res.data);
            yield put(action);
        }catch(e){
            console.log("网络请求失败");
        }
    }
    export default mySaga;
    

    具体流程:
    dispatch一个action——》action会被sagas.js接收到
    ——》如果符合takeEvery里面那个字段,即‘GET_SAGA_ACTION’——》
    调用fetchUser方法——》put方法会将新的action传给reducer

    相关文章

      网友评论

          本文标题:Redux-saga 中间件

          本文链接:https://www.haomeiwen.com/subject/ivbguctx.html