redux样板代码简化写法
直接使用redux,要写很多样板代码,大量的actiontype,actionCreator。
一个异步的方法要写三个actiontype,三个actionCreator,十分繁琐。
下面是本人使用的一种简化写法,使用数组动态生成一些action和actionCreator,具有参考价值。
action-type.js
export const asynctypes = [
'getCateList',
'getArticleList',
'searchArticles',
'getArticleDetail',
] export const synctypes = [
'@@router/LOCATION_CHANGE'
] export const types = {}; asynctypes.forEach(item => {
types[item + '.start'] = item + '.start';
types[item + '.ok'] = item + '.ok';
types[item + '.error'] = item + '.error';
}); synctypes.forEach(item => {
types[item] = item;
});
synctypes生成同步的actiontype,asynctypes生成异步的actiontype,字符串只在数组中声明一次,减少书写量
action.js
import {asynctypes} from './action-type';
import {createAction} from 'redux-actions'; function fCreateActionsAsync(aType,fCreateAction){
const oResult = {};
aType.forEach(item => {
oResult[item + 'Start'] = fCreateAction(item + '.start');
oResult[item + 'Ok'] = fCreateAction(item + '.ok');
oResult[item + 'Error'] = fCreateAction(item + '.error');
});
return oResult;
} export default fCreateActionsAsync(asynctypes,createAction);
导出的是通过asynctypes生成的三个actionCreator的集合,此集合可以直接在bindActionCreators函数中直接使用,
在组件中可以直接调用生成的action方法:
组件article.jsx
import acts from 'index/redux/actions'; export default connect(
(state,props) => { return {data: state.article.data,currentCate:fCurrentCate(state,props)} },
dispatch => { return {actions: bindActionCreators(acts,dispatch)} }
)(Article);
在组件中使用actions.getCateListStart就可以开始一个异步调用了。
start是个开始,项目中使用了redux-saga来自动唤起下面的异步调用,异步完成后自动调用ok或error的action。
//根saga中监控所有的异步调用
export default function* rootSaga(){
yield [
fork(wacthArticleDetail),
fork(watchCateList),
fork(watchActicleList),
fork(watchSearchAtricles)
]
}
//监控到异步start调用,自动唤起异步调用
function* wacthArticleDetail(){
yield takeEvery(actions.getArticleDetailStart,fGetArticleDetailAsync);
} //异步调用结束自动唤起Ok或者error的action
function* fGetArticleDetailAsync(action) {
try{
const articleId = action.payload.articleId;
const article = yield call(getArticleDetail,articleId);
yield put(actions.getArticleDetailOk(article));
}
catch(err){
yield put(actions.getArticleDetailError(err))
}
}
redux样板代码简化写法的更多相关文章
- react第十八单元(redux中间件redux-thunk,redux工程目录的样板代码,规范目录结构)
第十八单元(redux中间件redux-thunk,redux工程目录的样板代码,规范目录结构) #课程目标 中间件:中间件增强redux的可扩展性,实现功能复用的目的. redux-thunk异步逻 ...
- 学习Redux之分析Redux核心代码分析
1. React,Flux简单介绍 学习React我们知道,React自带View和Controller库,因此,实现过程中不需要其他任何库,也可以独立开发应用.但是,随着应用程序规模的增大,其需要控 ...
- python多行代码简化
python中,可以把多行代码简化为一行,把for循环和if条件判断都集中到一行里来写,示例如下: >>> from nltk.corpus import stopwords > ...
- HTML代码简写法:Emmet和Haml
http://www.ruanyifeng.com/blog/2013/06/emmet_and_haml.html?bsh_bid=657901854 HTML代码简写法:Emmet和Haml ...
- Hibernate事务代码规范写法
----------------siwuxie095 事务相关概念 1.什么是事务 逻辑上的一组操作,构成这组操作的各个单元,要么一起成功, 要么一起失败 2.事务的四个特性 1)原子性 2)一致性 ...
- 列表查询组件代码, 简化拼接条件SQL语句的麻烦
列表查询组件代码, 简化拼接条件SQL语句的麻烦 多条件查询
- Py基础—变量名,条件循环,空执行,编码,运算符,字符比较,简化写法
变量名 只能是字母,数字,下划线.数字不能开头,不要和python内置的东西重复.赋予变量名内容:name1 = "shit" 输出变量名内容 print(name1) 条件语句 ...
- mybatis 04: mybatis对象分析 + 测试代码简化 + 配置优化
MyBatis对象分析 测试代码示例 package com.example.test; import com.example.pojo.Student; import org.apache.ibat ...
- 提高Objective-C代码质量心机一:简化写法
提高OC代码质量的小心机 一.OC特性 OC 为 C 语言添加了面向对象特性,是其超集; OC 使用动态绑定的消息结构,也就是,在运行时才会检查对象类型; 接收一条消息后,究竟应执行何种代码,由运行期 ...
随机推荐
- Selenium(Python)驱动Firefox浏览器
我的版本是Firefox Setup 52.7.0.exe+geckodriver-v0.15.0-win64.zip, 把驱动geckodriver.exe放到Python安装目录下, 也可以指定驱 ...
- 关于maven项目中修改的JS不生效的解决方案
1. 问题描述 昨天下午博主在开发学习的过程中,碰到一个修改了JS无法生效的问题,折腾我不少的时间,现将百度到的解决方案总结一下,以便下次碰到类似问题能够最快的找到解决方案 2 解决方案 2.1 方案 ...
- 树的层次遍历(Trees on the level,UVA 122)
题目描述: 题目思路: 1.用结构链表来建树 2.用队列来实现层次遍历,当遍历到根节点时,将其子节点压入队列 #include <iostream> #include <cstdli ...
- spark写入ES(动态模板)
使用es-hadoop插件,主要使用elasticsearch-spark-20_2.11-6.2.x.jar 官网:https://www.elastic.co/guide/en/elasticse ...
- Python3中@的作用
可能是自己理解能力差,网上看了一大堆教程,完全没搞懂. 自己敲几行代码,终于理解是怎么回事了. #python 3.6 #!/usr/bin/env python # -*- coding:utf-8 ...
- Python入门(5)
导览: 函数 集合 迭代器与生成器 模块 一.函数 只要学过其他编程语言应该对函数不太陌生,函数在面向过程的编程语言中占据了极重要的地位,可以说没有函数,就没有面向过程编程,而在面向对象语言中,对象的 ...
- POJ 1873 The Fortified Forest(枚举+凸包)
Description Once upon a time, in a faraway land, there lived a king. This king owned a small collect ...
- redis集群sentinel哨兵模式的搭建与实际应用
参考资料:https://blog.csdn.net/men_wen/article/details/72724406 之前环境使用的keepalived+redis vip集群模式,现在我们服务切换 ...
- 实用的ES6特性
1. 函数参数默认值 不使用ES6 为函数的参数设置默认值: function foo(height, color) { var height = height || 50; var color = ...
- Thunder团队第三周 - Scrum会议5
Scrum会议5 小组名称:Thunder 项目名称:i阅app Scrum Master:苗威 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传康 ...