美文网首页
Vuex使用

Vuex使用

作者: 席坤 | 来源:发表于2018-01-15 09:50 被阅读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。

    相关文章

      网友评论

          本文标题:Vuex使用

          本文链接:https://www.haomeiwen.com/subject/xsdroxtx.html