zoukankan      html  css  js  c++  java
  • redux-saga

    redux-saga是一个redux的中间件。普通的reducer函数只能是纯函数(输出由输入决定;不会改变作用域之外的值),并且只能处理同步操作。而redux-saga可以监听并执行异步操作和其他副作用。

    1. redux-saga分类

    redux-saga分为三类:

    1. root saga

    启动saga的唯一入口; 启动的时候和reducer类似,只能有一个saga(generator函数)。

    2. watcher saga

    监听被dispatch触发的action, 当接受到action或者知道其被触发时,触发worker saga执行

    3. worker saga

    进行异步操作

    2. redux-saga的用法

    1. 生成中间件并应用
    import creteReactSagaMiddleware from 'redux-saga';
    
    const sagaMiddleware = creteReactSagaMiddleware();
    let store = applyMiddleware(sagaMiddleware)(createStore)(reducer);
    2. 合并sagas为根saga并启动根saga

    1. 用all方法合并saga

    import { all } from 'redux-saga/effects';
    import hellosage from './sagas/hellosaga';
    import watcherIncrease from './sagas/increatesaga';
    
    export default function* () {
      yield all([
        watcherIncrease(),
        hellosage()
      ])
    }
    
    /***./sagas/increatesaga***/
    import { takeEvery, put, delay, call } from 'redux-saga/effects';
    import * as types from '../actions/action-types';
    
    function* watcherIncrease() {
      // 监听每一次的ASYNCINCREASE操作
      // 监听到后自动调用workerSaga, 实现异步操作等
      yield takeEvery(types.ASYNCINCREASE, workerSaga);
    }
    
    function* workerSaga() {
      // 延迟1000秒;将异步操作按照同步写法
      yield delay(1000); //还可以写作:yield call(delay, 1000);
      // 触发同步操作
      yield put({type: types.INCREASE});
    }
    
    export default watcherIncrease

    2. 启动根saga

    import { createStore, applyMiddleware } from 'redux';
    import reducer from './reducers';
    import rootSaga from './rootsaga';
    import creteReactSagaMiddleware from 'redux-saga';
    
    const sagaMiddleware = creteReactSagaMiddleware();
    let store = applyMiddleware(sagaMiddleware)(createStore)(reducer);
    
    // sagaMiddleware是一个generator函数的执行器
    sagaMiddleware.run(rootSaga);
    
    export default store;
  • 相关阅读:
    List集合之Vector分析
    List集合之ArrayList分析
    Linux下的tar压缩解压缩命令详解
    第五次会议(4.7)
    第四次会议(3.31)
    第三次会议(3.17)
    第二次会议(3.9)
    第一次会议(3.1)
    团队的Kick off
    Parse error: syntax error, unexpected T_ENDFOREACH in..报错处理
  • 原文地址:https://www.cnblogs.com/lyraLee/p/12079086.html
Copyright © 2011-2022 走看看