redux本身还是过于简单,实际使用的时候需要配合许多插件。

下面是一些插件与vuex的功能对比

redux-actions <=> vuex的mutation的写法

reselect <=> vuex的getters

redux-react <=> vuex的mapState,mapActions,mapMutations

1.redux-actions

redux-actions是用来简化action和reducer的写法。
redux-actions的常用的API分别是createAction、createActions、handleAction、handleActions、combineActions

简化前后的对比如下:

1.创建Action

//简化前写法
const COUNTER_INCREMENT = 'COUNTER_INCREMENT';
const COUNTER_DECREMENT = 'COUNTER_DECREMENT'; export const incrementCounter = () => ({
type: COUNTER_INCREMENT,
});
export const decrementCounter = () => ({
type: COUNTER_DECREMENT,
}); //简化后写法
const COUNTER_INCREMENT = 'COUNTER_INCREMENT';
const COUNTER_DECREMENT = 'COUNTER_DECREMENT';
export const incrementCounter = createAction('COUNTER_INCREMENT');
export const decrementCounter = createAction('COUNTER_DECREMENT');

2.创建Reducer

//简化前写法
export default (state = 0, action) => {
switch (action.type) {
case COUNTER_INCREMENT:
return state + 1;
case COUNTER_DECREMENT:
return state - 1;
default:
return state;
}
} //简化后写法
export default handleActions({
[incrementCounter](state) {
return state + 1;
},
[decrementCounter](state) {
return state - 1;
},
}, 0)

2.reselect

reselect可以用来产生一些依赖变量,产生依赖变量的函数称为selector。
reselect不仅可以用于redux,其他有依赖属性的地方也可以使用。

Selector可以计算衍生的数据,可以让Redux做到存储尽可能少的state
Selector会缓存结果,只有在某个参数发生变化的时候才发生计算过程
Selector是可以组合的,他们可以作为输入,传递到其他的selector

例如:

import { createSelector } from 'reselect'

const shopItemsSelector = state => state.shop.items
const taxPercentSelector = state => state.shop.taxPercent const subtotalSelector = createSelector(
shopItemsSelector,
items => items.reduce((acc, item) => acc + item.value, 0)
) const taxSelector = createSelector(
subtotalSelector,
taxPercentSelector,
(subtotal, taxPercent) => subtotal * (taxPercent / 100)
) export const totalSelector = createSelector(
subtotalSelector,
taxSelector,
(subtotal, tax) => ({ total: subtotal + tax })
) let exampleState = {
shop: {
taxPercent: 8,
items: [
{ name: 'apple', value: 1.20 },
{ name: 'orange', value: 0.95 },
]
}
} console.log(subtotalSelector(exampleState)) // 2.15
console.log(taxSelector(exampleState)) // 0.172
console.log(totalSelector(exampleState)) // { total: 2.322 }

reselect的详细用法,可以参考https://www.jianshu.com/p/6e38c66366cd

参考:https://majing.io/posts/10000006441202

最新文章

  1. WSME api controller嵌套使用wtypes
  2. 搭建java开发环境、使用eclipse编写第一个java程序
  3. RCP:拖拽功能的实现 Drag and Drop
  4. Django学习笔记之一
  5. 修改SQL Server 2005 数据库文件名字
  6. 在Linux CentOS 6.6上安装Python 2.7.9
  7. hdu----(2222)Keywords Search(trie树)
  8. c#部分---又见循环。。
  9. 会话—cookie
  10. 【Entity Framework 7】 完全不一样的玩法
  11. UVALive 5990 Array Diversit
  12. hdu 1166 敌兵布阵(线段树,树状数组)
  13. C语言库函数大全及应用实例十三
  14. Mac_Homebrew
  15. 命令行窗口中用telnet测试HTTP协议
  16. kaggle入门项目:Titanic存亡预测(四)模型拟合
  17. 网络协议 21 - RPC 协议(中)- 基于 JSON 的 RESTful 接口协议
  18. Zookeeper原理、安装、基本使用和API
  19. LINUX内核分析第六周学习总结——进程的描述与创建
  20. TextBox显示提示信息

热门文章

  1. [JSON].getObj( keyPath )
  2. CSP201409-2:画图
  3. poj 3468 (区间修改 区间查询)
  4. linux服务器操作小技巧
  5. fp-growth树创建代码及详细注释
  6. lvs+keepalived详解
  7. HADOOP docker(一):安装hadoop实验集群(略操蛋)
  8. 学霸系统ui部分软件发布说明
  9. Alpha 冲刺(2/10)
  10. Activemq 消息类型 (转)