VUE常用知识点

Vuex与Redux对比

2019-02-26  本文已影响362人  triumphperson

仅从设计理念、使用角度进行对比,不涉及实现原理。

尤大也说过VUEX是吸收了Redux的经验,放弃了一些特性并做了一些优化,代价就是VUEX只能和VUE配合。

而Redux则是一个纯粹的状态管理系统,React利用React-Redux将它与React框架结合起来。

VUEX与React-Redux:一个是针对VUE优化的状态管理系统,一个仅是常规的状态管理系统(Redux)与React框架的结合版本。它们必然在都具备常规的状态管理的功能之外,针对性地对各自所对应的框架还会有一些更优的特性,并且React-Redux还有一些衍生项目。DVA就是一个基于对React-Redux进行封装并提供了一些优化特性的框架,所以下文也会结合DVA进行对比。

设计理念:

虽然很多文章都提到说不要为了用状态管理而用状态管理,但是状态管理对于前端单页应用的管理思想还是很精髓的:

我认为,一旦认同这种模式并在项目组使用了状态管理,就要严格的在整个应用中都采用这种模式。因此,基于这种特性,我们需要一种机制或者框架:使得我们能够管理状态,感知变化,并将状态映射为页面表现。

Redux,本身就是一个单纯的状态管理者,我们不追溯它的历史,从使用角度来说:它提供一个全局的对象store,store中包含state对象用以包含所有应用数据,并且store提供了一些reducer方法。这些方法可以自定义,使用调用者得以改变state的值。state的值仅为只读,如果需要更改则必须只能通过reducer。

有了状态保存,有了读写机制,Redux这一套状态管理的框架对于web应用的状态机管理的思想就是可用的。

React-Redux,简单来说,它提供了一些接口,用于Redux的状态和React的组件展示结合起来,以用于实现状态与视图的一一对应。

VUEX,吸收了Redux的思想,并且针对web应用的开发模式和VUE框架做了优化。所以它在实现了全量Redux的思想以外,为了与VUE框架结合,它也具备了类似React-Redux中的与框架结合的功能(尽管具体使用方式可能有差异),此外还一些更好用的特性,下文会说到。

DVA,则是对React-Redux进行了封装,并结合了Redux-Saga等中间件,而且使用了model概念,也相当于在React-Redux的基础上针对web应用开发做了优化。(个人认为DVA框架的开发者可能是对VUEX有所借鉴的)

所以说,看起来VUE家族的一个VUEX,就可以匹敌React家族的这些封装封装再封装……

VUEX数据流向图
image.png
DVA数据流向图
image.png

对比:

因为VUEX可以以一敌多,接下来将对以下三方面进行分析

I

Redux
VUEX
Redux vs VUEX 对比分析

store和state是最基本的概念,VUEX没有做出改变。其实VUEX对整个框架思想并没有任何改变,只是某些内容变化了名称或者叫法,通过改名,以图在一些细节概念上有所区分。

总的来说,VUEX通过弱化概念,在任何东西都没做实质性削减的基础上,使得整套框架更易于理解了。

另外VUEX支持getter,运行中是带缓存的,算是对提升性能方面做了些优化工作,言外之意也是鼓励大家多使用getter。

II

React-Redux
VUEX
React-Redux vs VUEX 对比分析

通过使用方式上的较大差异,也可以看出理念上的不同。

总的来说,就是谁包谁,谁插谁的问题。Redux毕竟是独立于React的状态管理,它与React的结合则需要对React组件进行一下外包装。而VUEX就是为VUE定制,作为插件、以及使用插入的方式就可以生效,而且提供了很大的灵活性。

III

DVA
VUEX
DVA vs VUEX 对比分析

它们将store拆分成模块的出发点是相同的,这也是大型应用开发所必备的。并且模块化的思路都是一样的。但是异步方法调用方面有所不同:

VUEX还有个特性就是它的表单类组件的双向绑定。和VUEX结合之后,也是支持绑定到VUEX中的state上的。

VUEX的异步方法的提交方式,注意是“dispatch一个Action”。这在概念上是和Redux中的状态更新提交是一致的。从VUEX数据流向图也能看出,VUEX也是建议只向外部暴露Action供调用。这样一来,VUEX在使用上更加接近Redux了。

总的来说,DVA和VUEX我认为肯定是有借鉴学习的成分在里面的,对异步的使用方面也没有孰优孰劣。我们也完全可以找到或者封装一个React-Redux中间件,以在React中使用类似的纯异步方法;也可以基于VUE与VUEX做开发,使得它可以支持Generator甚至async函数方式将异步代码写法同步化。

原文:https://blog.csdn.net/hyupeng1006/article/details/80755667

上一篇 下一篇

猜你喜欢

热点阅读