码迷,mamicode.com
首页 > 其他好文 > 详细

redux-saga

时间:2019-12-22 10:25:59      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:action   creates   function   work   合并   default   cin   执行器   ons   

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;

 

redux-saga

标签:action   creates   function   work   合并   default   cin   执行器   ons   

原文地址:https://www.cnblogs.com/lyraLee/p/12079086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!