Vuex使用

2018-01-15  本文已影响89人  席坤

Vuex是什么?

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式, 方便数据管理,避免数据重复加载,减少服务端压力。这个状态自管理应用包含以下几个部分:

state:驱动应用的数据源;

view:以声明方式将 state 映射到视图;

actions:响应在 view 上的用户输入导致的状态变化

NPM

npm install vuex --save 进行安装在pack.json可查看版本

Yarn

yarn add vuex

在使用webpack 打包使,必须通过 Vue.use(Vuex) 来安装Vuex:

核心概念

state:可理解为改模块定义了那些数据,可通过this.$store访问到。

Mutation:更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数,如上图。在view 可使用  this.$store.commit("moduleA/stateChange", { name: "潘神" }); 调用

actions:Action 类似于 mutation,不同在于:

Action 是通过 mutation,而不是直接变更状态,上面已经说到,Mutation是改变state唯一方法

Action可操作任意异步函数,比如调用服务端请求。

Module:由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。因此我们得学会拆分模块,每个模块对应自己state。Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割,但是不建议嵌套多级。

const moduleA = { 

namespaced: true,

 state: { ... },

 mutations: { ... },

 actions: { ... }, 

 getters: { ... }

}

const moduleB = { 

namespaced: true,

 state: { ... },

 mutations: { ... },

 actions: { ... }, 

 getters: { ... }

}

export default new Vuex.Store({

    modules: {

        moduleA,

        moduleB

    }

})

注意:在使用拆分model时,namespaced=true,不然 this.$store会找不到对应model。

在View中的使用

在View中更改Model state

当没有异步网络操作更改是,我们可以直接操作

this.$store.commit("moduleA/stateChange", { name: "潘神" }); 来进行修改。

moduleA/stateChange:表示 moduleA 下面的同步更新函数 stateChange

{ name: "潘神" } 传递参数

如图名字已经更新。

如果进行异步操作更新,可以 this.$store.dispatch("moduleA/loadVote", {name:"心智"}) 其最终还是会走到同步更新函数stateChange 。因为前面已经说到 更改state 唯一方法就是mutations。

上一篇下一篇

猜你喜欢

热点阅读