vuex官网
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
Vuex 和单纯的全局对象有以下两点不同:
- Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
- 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。
vuex状态的管理
单一的状态树
Vuex使用的是单一的状态管理,一个仓库store包含了项目中所有的数据,每一个应用都只包含一个store实例,单一的状态树可以让我们更加直接定位到对应的数据源。
单一的状态树和一切皆模块的思想并不冲突----通过vuex的模块化机制来管理和分布到各个文件中。
疑惑点1-vuex的使用场景和作用?
在相对独立的组件中,action -> state -> view的单向数据流能得到保证。而真实业务场景经常需要状态传递及共享。vuex解决了几个问题:
1.组件之间的
数据通信
(主要是非父子组件之间)
2.使用单向数据流的方式进行数据的中心化管理
(数据的共享和缓存等等)
为什么要解决这样的问题呢?其实是因为当程序逻辑过于复杂的时候,非中心化的数据管理会让整个 app 的逻辑非常混乱。我们可以把它当成内存数据库来使用。
总而言之,假如你需要数据和组件分离,分别处理,那么使用 Vuex 是非常合适的
疑惑点2-为什么vuex的状态修改要通过mutations,而不直接赋值
官网对状态修改的要求
:
更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。
官网对状态修改的解释
:
我们通过提交 mutation
的方式,而非直接改变store.state.count
,是因为我们想要更明确地追踪到状态的变化。这个简单的约定能够让你的意图更加明显,这样你在阅读代码的时候能更容易地解读应用内部的状态改变。此外,这样也让我们有机会去实现一些能记录每次状态改变,保存状态快照的调试工具。有了它,我们甚至可以实现如时间穿梭般的调试体验。
总结起来两点:
1.
简单约定
,让我们的意图更加明显
2.提交 mutation的方式vuex会记录到状态的变化,为了能用 devtools 追踪状态变化
。
网友评论