一、概览
Redux
与VueX
是目前应用最广的前端框架的状态管理解决方案,其中Vuex
是官方推出的方案,而Redux
是React
社区提供的。
2014年 Facebook 提出了Flux
架构的概念,引发了很多的实现。2015年,Redux
出现,将Flux
与函数式编程结合一起,经过多次迭代更新,目前已经成为React
生态中的最受欢迎的解决方案。VueX
是跟随Vue
一起发布的状态管理工具,Vue
自称是一个渐进式的框架,就意味着其实VueX
跟Redux
一样可以根据自己的需求来选装。它也借鉴了Flux
的思想。
二、核心概念对比
1、Redux
(1)Web 应用是一个状态机,视图与状态是一一对应的。
(2)所有的状态,保存在一个对象里面。(这两个观点是阮一峰老师的博客里讲的,很精炼,所以拿来直接用了。)
(3)action
:同步action ,或借助中间件
实现异步操作,action
不会改变store
,只是描述了怎么改变store
。
(4)reducer
(纯函数,根据action
和旧的store
计算出新的store
。
(5)store
:单一数据源。
(6)Redux
提供了store.getState()
这个 API 获取store
树,还有store.subscribe(listener)
订阅store
的变化,当store
改变时会调用监听器;
(7)Redux
可以通过combineReducers()
结合各个组件的reducer
,各个组件可以单独管理自己的状态,最后合并为一个reducer
用于生成一个store
;
(8)将状态数据绑定到视图:Redux
将状态映射到视图可以通过React-redux
映射到React
组件, 当然也可以直接使用Redux
自己提供的store.subscribe()
订阅store
的改变,从而更新视图,因此Redux
不仅仅可以用于React
,也可以用于其他框架如Vue
;
2、VueX
(1)mutation
(用于同步操作)
(2)action
(可用于异步操作,提交mutation
)
(3)mutation
里面直接修改state
(4)state
(单一数据源)
(5)Vuex
有一个getter
的概念用于根据state
派生出一些数据,像Vue
的计算属性一样,当state
改变时会重新计算出一个结果出来,提供给需要的组件。
(6)Vuex
用Module
这个概念划分store
,与Redux
一样,可以多层嵌套子状态。
(7)将状态数据绑定到视图:Vuex
只能用于Vue
,它提供了mapState
、mapAction
、mapMutations
等API 将store
映射到Vuex
各个组件,这个参考了React-redux
的mapStateToProps
。
三、使用原则
Redux 使用原则:
1.单一数据源(一个Redux应用只有一个store),也是单向的数据流;
2.state只读(唯一改变 state 的方法就是触发 action,action 是一个用于描述已发生事件的普通对象。);
3.使用纯函数(reducer)来修改state。
Vuex 使用原则:
- 应用层级的状态应该集中到单个 store 对象中。
- 提交 mutation 是更改状态的唯一方法,并且这个过程是同步的。
- 异步逻辑都应该封装到 action 里面。
四、异步操作
(一)、Redux
1. Redux 得益于 中间件机制,利用 redux-thunk
(redux-thunk
可以 dispatch
函数,这个函数用于生成 action
,所以在这个函数里面我们可以进行异步操作,等异步的结果出来后再放在 action
里面将这个 action
用 dispatch
分发出去, 而这个函数被叫做 “action creator
” )。
2. 可以将异步逻辑放在 action creator
里面,通过 action creator
做一个控制反转, 给 action creator
传入 dispatch
作为参数,于是就可以 dispatch action
,(原本是通过 dispatch
来分发 action
,现在是异步 action
即 action creator
掌握了控制权调用 dispatch
,所以叫控制反转)。
3. Redux
并没有创造单独的概念出来专门用于异步逻辑,它是利用了 Redux
自己实现的中间件机制,中间件从 dispatch
一个异步 action
到 action
到达 reducer
之间处理 action
,在这期间通过异步操作得到的结果可以放到 action
里面再通过 dispatch
分发到 reducer
。
4. 以前 dispatch
一个 action
之后,这个 action
回立即到达 reducer
,所以是同步 action
,现在在 action creator
里面,我们通过控制反转,可以等待异步操作结果再生成 action
分发,所以叫做异步 action
:
(二)、VueXVuex
是用 mutation
来对应 Redux
的 action
,另外 Vuex
又创造了一个 action
来提交 mutation
并通过异步提交 mutation
来实现异步操作结果能够到达 state
。
说明
以上部分内容来源与自己复习时的网络查找,也主要用于个人学习,相当于记事本的存在,暂不列举链接文章。如果有作者看到,可以联系我将原文链接贴出。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。