zoukankan      html  css  js  c++  java
  • Vue笔记(五):Vuex

    Vuex—集中式状态管理模式

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

    以上是 Vuex 官方文档给出的定义,抓一下关键词我们不妨称之为集中式的状态管理模式。它实际上就是将组件间的共享状态抽取出来,以一个全局单例模式进行状态管理,下面我们用官方文档上的例子来对比一下两者的使用。

    1. 常用的组件状态共享

    在下面的 Vue 计数应用中,我们常用以下方式进行状态管理。

    • state:定义组件初始数据
    • view:根据状态变化更新视图
    • actions:响应用户操作产生的状态变化
    new Vue({
      // state
      data () {
        return {
          count: 0
        }
      },
      // view
      template: 
        `<div>{{ count }}</div>`,
      // actions 
      methods: {
        inc () {
          this.count++
        },
        dec () {
          this.count--
    	}
      }
    })
    

    每个组件内拥有自己的数据和逻辑,很好的实现了组件化化便于管理。但这种方式有极大的弊端,组件的个数或者嵌套层级越多时,他们之间的状态管理就变得十分复杂。比如兄弟组件间同步状态需要使用 event bus,父子间组件间需要 props 属性和 emit 触发事件来达到目的。

    2. 集中式状态管理

    为了解决上述问题,我们可以采用 Vuex

    • state:全局唯一数据源,包含全部的应用状态。集中存储了组件所需要的数据以进行全局的统一状态管理。
    • mutations:状态变更方法。提交 mutations 是更改 state 的唯一方法。
      • commit:提交 mutations 的唯一方法。
    • actions:负责响应用户操作,主要是异步操作。
      • dispatch:执行 actions 的唯一方法。
    • getters:类似于计算属性 computed,可响应式获取 state 对象。

    Vue 组件接收交互行为,调用 dispatch 方法触发 action 相关处理,若页面状态需要改变,则调用 commit 方法提交 mutation 修改state,通过 getters 获取到state新值,重新渲染 Vue Components,界面随之更新。

    new Vuex.Store({
      state: {
        count: 0
      },
      mutations: {
        inc: state => state.count++,
        dec: state => state.count--
      }
    })
    new Vue({
      el: '#app',
      computed: {
        count () {
          return store.state.count
        }
      },
      methods: {
        inc () {
          store.commit('inc')
        },
        dec () {
          store.commit('dec')
        }
      }
    })
    

    Vuex 将所有的状态集中管理,使得应用的数据流动和状态变化十分清晰,简化组件间的状态同步与修改。

    总结

    对于 Vuex 的适用场景,要取决于组件间通信的复杂程度。如果较为复杂则要使用 Vuex 来简化操作增加程序的可维护性。

  • 相关阅读:
    对数据劫持 OR 数据代理 的研究------------引用
    对React性能优化的研究-----------------引用
    对abel 转译 class 过程的研究----------------------引用
    对vue-router的研究--------------引用
    对JavaScript 引擎基础:原型优化的研究 -----------------------引用
    对vue源码之缓存的研究--------------引用
    对前端数据结构与算法的研究----------------引用
    正则表达式巩固_从别的资料上弄下来的
    十进制转换
    cmd 安装第三方库问题
  • 原文地址:https://www.cnblogs.com/qimeng/p/8366756.html
Copyright © 2011-2022 走看看