• 使用redux-saga中间件实现异步数据请求


    概述:

    react-saga有3个重要的函数:call ,put takeEvery。

    • call:在worker saga里执行异步函数;
    • put:异步函数有结果的时候,派发action;
    • takeEvery:当监听到aciton时,执行worker saga。

    saga主要用到的是generator。

    使用:

    新建sagas.js

    import { takeEvery , put} from 'redux-saga/effects'
    import axios from 'axios';
    import { GET_INIT_LIST } from './actionType';
    import { initListAction} from './actionCreator';
    //worker saga
    function* todolist() {
        //异步获取数据
        try{
            const res = yield  axios.get('api/list');
            const action=initListAction(res.data);
            yield put(action);
        }catch(e){
            console.log('list.json 网络请求失败')
        }
    }
    //当type为GET_INIT_LIST的action触发时,调用todolist函数
    function* mySaga() {
      yield takeEvery(GET_INIT_LIST, todolist);
    }
    
    export default mySaga;

    创建store的时候,按照文档配置好redux-saga

    import { createStore, applyMiddleware ,compose} from 'redux';
    import reducer from './reducer'
    import createSagaMiddleware from 'redux-saga'
    import mySaga from './sagas'
    //1.创建中间件
    const sagaMiddleware = createSagaMiddleware();
    //2.应用中间件
    const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?   window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({}) : compose;
    const enhancer = composeEnhancers(applyMiddleware(sagaMiddleware));
    const store = createStore(reducer, enhancer);
    //3.执行run
    sagaMiddleware.run(mySaga)
    export default store;

     组件里还是和之前一样

    componentDidMount(){
    	const action=getInitListAction();
    	store.dispatch(action);
    }
    

      

  • 相关阅读:
    浏览器缓存机制
    vim 同时操作多行
    webpack打包性能优化
    测试 IE 浏览器兼容性 VirtualBox + modern.ie
    react-redux 学习笔记
    Redux 学习笔记
    Mac 下抓包工具 Charles 修改特定请求
    PyUsb的使用记录--window中
    Java 通过Jna调用dll路径问题
    OpenJdk14精简jdk运行javaFx样式丢失问题
  • 原文地址:https://www.cnblogs.com/superlizhao/p/9441735.html
Copyright © 2020-2023  润新知