zoukankan      html  css  js  c++  java
  • vuex的理解。

    1.什么是vuex?

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

    2.为什么需要用到状态管理?

      在开发中,我们经常会遇到多个组件试图依赖同一个状态,如果没有用到vuex,则需要组件之间来回传递修改值,这样会非常的麻烦,给大家看一个图就明白了。

      

      这里根组件main.js,以及后代组件app.vue,hello.vue,home.vue需要共享状态count。当状态count更新时,所有依赖count的组件都必须响应更新,为了实现根组件及后代组件能响应count,需要组件间来回接受传递,会非常的复杂,这个时候就需要要用vuex状态管理,使用了vuex状态管理就方便许多了,看下图:

      

      3.store选项:

    • state

        Vuex 使用单一状态树,用一个对象就包含了全部的应用层级状态。作为一个“唯一数据源”而存在,存放组件中的状态。

    • getter

      getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算(可以认为是 store 的计算属性)。
      • 接受 state 作为第一个参数
      • 接受其他 getter 作为第二个参数
    • mutation

        更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。每个 mutation都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler) 。

      • mutation 必须是同步函数
      • 接受 state 作为第一个参数
      • mutation handler,需要以相应的 type 调用 store.commit 方法
      • 在组件中使用 this.$store.commit('xxx'[, args1, args2...]) 提交 mutation
    • action

      • 通过 store.dispatch 方法触发。
      • action 提交的是 mutation,而不是直接变更状态。
      • action 可以包含任意异步操作。
      • 接受一个与 store 实例具有相同方法和属性的 context 对象,因此可以调用 context.commit 提交一个 mutation,或者通过 context.state 和 context.getters 来获取 state 和 getters。
    •  module
      • 当应用变得非常复杂时,store对象就有可能变得相当臃肿。为了解决以上问题,Vuex允许我们将store分割成模块(module)。每个模块拥有自己的state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割
      • module.mutation
        • 接收的第一个参数是模块的局部状态对象
      • module.getter
        • 模块内部的 getter,第一个参数是模块的局部状态对象,第二个参数是模块的局部geeter,第三个参数是根节点状态
      • module.action
        • 对于模块内部的 action,第一个参数contextstore 实例具有相同方法和属性的 context 对象,state局部状态通过 context.state 暴露出来,根节点状态则为 context.rootState

      4.vuex辅助函数:

      • mapState
      • mapGetters
      • mapMutations
      • mapActions

          import {mapState,mapGetters,mapActions,mapMutations} from 'vuex'

          export default {

            computed: {

               ...mapGetters({ num2: 'filterCount' }),

               ...mapState(['count']),

             },

            methods: {

              ...mapActions({ addHandle: 'addAction' }),

              ...mapMutations({ deHandle:'deIncrement' })

             }

          }

        

       最后附上一张图方便理解:

        

  • 相关阅读:
    命令行解释器(shell)
    TensorFlow经典案例2:实现最近邻算法
    TensorFlow经典案例1:基本操作
    TensorBoard在谷歌浏览器显示找不到网页
    Pandas中的DataFrame.filter()
    【转】保证训练集和测试集取到和数据集中相同比例的类别
    数据分析小实践:统计每个国家存在心理健康问题的平均年龄
    TabActivity 切换Activity界面
    Android获取屏幕实际高度跟显示高度,判断Android设备是否拥有虚拟功能键
    非常简单的XML解析(SAX解析、pull解析)
  • 原文地址:https://www.cnblogs.com/0314dxj/p/11121302.html
Copyright © 2011-2022 走看看