redux的一些插件总结(redux-actions,reselect)
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具