什么是Vuex

  什么是Vuex

  Vuex是一个服务于Vue.js的状态管理模式,在vue应用中像中央存储一样为所有的组件服务,并且采用一些规则,来保证Vuex中存储的只能通过预先规定好的方式进行修改。它同时集成在Vue的官方调试工具devtools扩展中,以便支持高级功能,例如:zero-config time-travel debugging 和 state snapshot export / import

  什么是状态管理模式

  让我们通过Vue计数App来介绍:

  

 1 <template lang="pug">
 2     div {{ count }}
 3 </template>
 4 
 5 <script>
 6 export default {
 7   data () {
 8     return {
 9       count: 0
10     }
11   },
12   methods: {
13     increment () {
14       this.count++
15     }
16   }
17 }
18 </script>

(上边这个我写的单文件组件,可以直接引用到Vue实例中)

  这是一个自加减计数的单应用,包含如下部分:

  1.state:真正驱动我们app的资源

  2.view:state的声明映射

  3.action:用户在视图view中输入的,可能会改变state的行为

这是一个单一数据流概念的极简单的表现:

Actions ==> state ===> view ===>Actions

然而,这种简单的状态修改,会因为多个组件共用state而被轻易的打断:

  1.多个组件也许都依赖于同一个状态

  2.也许不同的组件都需要修改同一个状态

 对于第一个问题,深度嵌套的组件之间传递属性是一件枯燥的事,并且对于同级组件来说也不简单。对于第二个问题,我们经常发现我们自己会使用一些方法,例如:通过直接父级或子级实例作为参照,或是通过事件来修改和同步多个state的副本。并且所有这些方法都很脆弱的,还能很快导致代码变得难以维护。

  那么我们为什么不把这个state从所有的组件中提取出来呢,统一放在全局来管理唯一的状态?通过这种思想,我们的组件树变成了一个巨大的视图,任何组件都能够使用状态和触发相应事件,无论他们处于组件树的哪个位置。

  另外,通过定义和分离状态管理和相关规则中涉及到的概念,可以提高我们代码结构的健壮性和可维护性。

  这些是vuex的基本理念,受到Flux Redux 和 The Elm Architecture等的启发而来。不像其他模式,Vuex是一个专门为Vue.js量身定制的配套工具,为Vuejs使用颗粒响应系统进行高效的更新提供帮助。

  使用时机

 虽然Vuex帮助我们管理处理共享状态管理,但是也给我们带来了更多的概念和模板的使用成本,这是一个长期和短期收益的权衡。

 如果你从来没有编写过的大型应用,突然进入Vuex,你会感到非常的繁琐和困难。这是非常正常的,如果你的应用很简单,你即使不用Vuex,大多数情况下你的代码也可以很流畅。一个简单存储功能也可以满足你的所有需求。但是如果你在开发一个中大型单页面应用,你会有机会遇到这种情形,考虑怎样才能更好地处理你使用的那些组件之外的状态,Vuex会是你下一步最好的选择。“Flux libraries are glasses,you will know when you need them”,引用了这是Redux作者Dan Abramov的一句话,狠形象的解释了这个原理。

posted @ 2018-08-08 10:47  Dick_shi  阅读(225)  评论(0编辑  收藏  举报