zoukankan      html  css  js  c++  java
  • Vuex--状态管理模式

    1、Vuex是什么

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

    2、Vuex 的作用

      集中式管理vue多个组件共享的状态和从后台获取的数据  

    3、Vuex核心-store库

       上图中虚线框的部分就是vuex,是公用的数据存储区域,可以理解为一个store库,这个库主要由以下三部分组成:

    • State:存放所有的公共数据,当组件使用公共数据时,直接去调用State就可以了。若 状态发生变化,相应 的组件也会得到高效更新。
    • Actions:存放组件需要调用的异步操作。若组件想要改变State中的数据,必须先通过Dispatch方法调用Actions(有时可以忽略调用Actions,直接调用Mutations),执行一些异步或同步操作
    • Mutations:组件若要改变数据,先去调用Actions,通过Actions再根据Commit方法去调用Mutations,此时Mutations中存放的是同步的修改State的方法

    4、Vuex 的工作原理

        首先vue组件会通过this.$store.state或者mapState()直接从State中获取数据。或者通过this.$store.getters或者mapGetters()从getters中获取数据。getters是计算属性数据 ,可以读取State中的数据。

    vue组件会通过$store.dispatch()或者mapActions触发actions。之后,actions通过commit触发mutations。而mutations会直接更新State中的数据

    5、创建store库

     1 const store = new Vuex.Store({
     2   state: {
     3     count: 0
     4   },
     5   mutations: {
     6     increment (state) {
     7       state.count++
     8     }
     9   }
    10 })
    之后,我们可以通过store.commit('increment')触发状态的变更;如果想要变更state数据时,必须以提交 mutation 的方式,这样才能更明确地追踪到状态的变化

    使用console.log(store.state.count) // -> 1获取数据

    6、vue组件中如何使用state状态呢?

      由于 store 中的状态是响应式的,在组件中调用 store 中的状态简单到仅需要在计算属性中返回即可。触发变化也仅仅是在组件的 methods 中提交 mutation。

    1 // 创建一个 Counter 组件
    2 const Counter = {
    3   template: `<div>{{ count }}</div>`,
    4   computed: {
    5     count () {
    6       return store.state.count//store.state.count 变化的时候, 都会重新求取计算属性,并且触发更新相关联的 DOM
    7     }
    8   }
    9 }

    但是,这种模式会导致组件依赖全局状态单例。在模块化的构建系统中,在每个需要使用 state 的组件中需要频繁地导入,并且在测试组件时需要模拟状态。为了解决这个问题,Vuex 通过 store 选项,提供了一种机制将状态从根组件“注入”到每一个子组件中(需调用 Vue.use(Vuex)):

    1 const app = new Vue({
    2   el: '#app',
    3   // 把 store 对象提供给 “store” 选项,这可以把 store 的实例注入所有的子组件
    4   store,
    5   components: { Counter },
    6   template: `<div class="app"><counter></counter> </div>`
    7 })
    通过在根实例中注册 store 选项,该 store 实例会注入到根组件下的所有子组件中,且子组件能通过 this.$store 访问到。
    此时组件Counter 使用state的实现:
     1 const Counter = {
     3   template: `<div>{{ count }}</div>`,
     4   computed: {
     5     count () {
     6       return this.$store.state.count
     7     }
     8   }
     9 }

     

    本文章主要是对Vuex基本知识点的学习总结,详细内容请参考官网https://vuex.vuejs.org/zh/                   

  • 相关阅读:
    Gridview常用操作
    在DataGridView列中嵌入ComboBox(vb.net版)【原创】
    使用net创建Access存储过程
    C博客作业00我的第一篇博客 1911
    C博客作业01分支、顺序结构 1911
    Lazy load image for listview and beging separate thread
    Android Send Email
    MySQL修复表数据
    Insertion and Deletion of Calendar Events
    TechCrunch:移动社交应用开创社交网络新格局
  • 原文地址:https://www.cnblogs.com/qing-5/p/11317132.html
Copyright © 2011-2022 走看看