安装依赖
1
| npm install vuex --save-dev
|
在文件目录下建立store文件夹,并且建立store.js
构造单一状态树
Vuex 使用单一状态树——是的,用一个对象就包含了全部的应用层级状态。至此它便作为一个“唯一数据源 (SSOT)”而存在。这也意味着,每个应用将仅仅包含一个 store 实例。单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。
如何使用
1 2 3 4 5 6 7 8 9
| import Vue from 'vue' import Vuex from 'vuex'
Vue.use(Vuex) export const store = new Vuex.Store({ state:{
} })
|
在main.js中使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| import Vue from 'vue' import App from './App.js' import {store} from './store/store'
Vue.config.productionTop = false;
new Vue({ store, el:'#App', router, compontents:{App} .... }) ```
### 在 Vue 组件中获得 Vuex 状态 那么我们如何在 Vue 组件中展示状态呢?由于 Vuex 的状态存储是响应式的,从 store 实例中读取状态最简单的方法就是在计算属性中返回某个状态: ``` js
const Counter = { template: `<div>{{ count }}</div>`, computed: { count () { return store.state.count } } }
|
每当 store.state.count 变化的时候, 都会重新求取计算属性,并且触发更新相关联的 DOM。
然而,这种模式导致组件依赖全局状态单例。在模块化的构建系统中,在每个需要使用 state 的组件中需要频繁地导入,并且在测试组件时需要模拟状态。
Vuex 通过 store 选项,提供了一种机制将状态从根组件“注入”到每一个子组件中(需调用 Vue.use(Vuex)):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| const app = new Vue({ el: '#app', store, components: { Counter }, template: ` <div class="app"> <counter></counter> </div> ` }) ``` 通过在根实例中注册 store 选项,该 store 实例会注入到根组件下的所有子组件中,且子组件能通过 this.$store 访问到。让我们更新下 Counter 的实现:
``` js const Counter = { template: `<div>{{ count }}</div>`, computed: { count () { return this.$store.state.count } } }
|