【Redux Saga炼金笔记】做一个可以重试N次的action
来源:互联网 发布:盈用软件图片 编辑:程序博客网 时间:2024/04/27 17:26
配方
- action: redoable
- effects: put, take, takeEvery
流程
- 点击按钮,执行sayHello的action
- sayHello的action只有执行第3次的时候才会成功
- 如果sayHello失败则自动重试直到成功或到达重试次数
实现
1 先定义一个redoable的action creator
/** * @params action: 需要被重试的标准action * @params successType: 当action成功后会被dispatch的action type * @params failureType: 当action失败后会被dispatch的action type * @params time: 重试最大次数 */function redoable(action, successType, failureType, time = 1) { return { type: 'REDOABLE', payload: { successType, failureType, action, time } };}
2 点击按钮时dispatch一个REDOABLE的SAY_HELLO的action
function Hello({ handleSayHello}) { return ( <div> <button onClick={handleSayHello}>Say Hello</button> </div> );}Hello = connect( () => ({}), (dispatch) => ({ handleSayHello() { dispatch(redoable({ type: 'SAY_HELLO' }, 'SAY_HELLO_SUCCESS', 'SAY_HELLO_FAILURE', 3)); } }))(Hello);
3 实现sayHello的saga来处理SAY_HELLO的action
function* sayHello(action) { times++; if (times < 3) { yield put({ type: 'SAY_HELLO_FAILURE' }); return; } times = 0; alert('Hello, nice to meet you!'); yield put({ type: 'SAY_HELLO_SUCCESS' });}
4 实现redoableInvoke的saga来处理REDOABLE的action
function* redoableInvoke(action) { const { action: realAction, successType, failureType, time } = action.payload; yield put(realAction); const {type} = yield take([successType, failureType]); if (type === failureType) { if (time === 0) { return; } const nextAction = {...action}; nextAction.payload = {...nextAction.payload, time: time - 1}; yield put(nextAction); }}
5 使用takeEvery来运行两个saga
store.runSaga(function * () { yield takeEvery('REDOABLE', redoableInvoke); yield takeEvery('SAY_HELLO', sayHello);});
See the Pen <a href="http://codepen.io/awaw00/pen/BppVgJ/">Redux Saga Cookbook 02</a> by aaron wang (<a href="http://codepen.io/awaw00">@awaw00</a>) on <a href="http://codepen.io">CodePen</a>. 0 0
- 【Redux Saga炼金笔记】做一个可以重试N次的action
- 【Redux Saga炼金笔记】1秒内点击3次按钮触发事件
- Redux saga
- redux-saga 实践总结
- react-thunk迁到redux-saga,他们的对比
- 浅析redux-saga实现原理
- react-native,redux,redux-saga组合开发
- Redux-Saga在React工程架构之的应用实践详解
- 重复一个指定的字符串 n次
- redux在react-native上使用(二)--加入redux-saga
- redux-saga HellWorld入门 异步计数器(react-redux)
- 给定n个数,每个都可以使用无数次,用这些数的和 是否可以组成一个给定的数字
- AxonFramework,Saga的基础设施
- cocos2d-x 3.1.1 学习笔记[7]Action progress 不仅仅是可以做cd的动画
- 认识redux的store,reducer,action
- React学习笔记_Redux-Saga
- rn+redux+immutable+saga+react-navigation技术栈
- 分享一个可以做UVa的网站
- ORACLE-SQL性能优化
- C语言 - 以16进制数据形式去打印文件
- Storm的BaseBasicBolt源码解析ack机制
- InnoDB关键特性
- oracle1
- 【Redux Saga炼金笔记】做一个可以重试N次的action
- C#获取Bitmap图中的裸数据
- android 知识库
- 基于DPDK的OVS环境搭建及验证
- django的访问途径
- DEDECMS之首页调用图集内容/标题/图片
- Theory Of Hashing And Hash Tables
- markdown2
- 你被勒索软件盯上怎么办?5大加密方法来解救