• 111


    一、 什么是Vuex?

    官方解释: Vuex是一个专为Vue.js应用程序开发的状态管理模式

    当项目比较庞大的时候,每个组件的状态比较多,为了方便管理,需要把组件中的状态抽取出来,放入Vuex中进行统一管理。

    当我们需要构建一个中大型的单页面应用程序是,Vuex可以更好的帮助我们在组件外部统一管理状态。

    二、Vuex的核心概念

    1. 5个核心概念

    State

    • 唯一的数据源:我们需要把任何一个组件中需要抽取出来的变量放入到state中去
    • 只要把store注册到app.js中,所有组件都可以使用其中的状态
    const Counter = {
        template:  `<p>{{total}}</p>`,
        computed:  {
               total(){
                     return  this.$store.state.total 
               } 
        }
    }
    

    Getters

    通过Getters可以派生出一些新的状态

    //  创建一个Vuex的实例
    const  store = new Vuex.Store({
           state: {
                goods: [
                      {id: 1, name: '....',  show: true},
                      {id: 2, name: '....',  show: false}, 
                      .......
                 ]     
           },
           getters: {
                 showGoods: state => {
                        return state.goods.filter(good => good.show);  
                 } 
           }    
    });
    

    Mutations

    更改Vuex的store中的状态的唯一方法时提交mutation

    const store = new Vuex.Store({
         state: {
             total: 1
          },
          mutations: {
               add (state){
                    // 更改状态
                   state.total++;  
               } 
          }
    });
    
    //调用: 
    store.commit('add');
    

    Actions

    Action提交的是mutation,而不是直接变更状态,

    Action可以包含任何的异步操作, 但mutation必须是同步操作,即所有的异步操作都写在Action里

    const store = new Vuex.Store({
         state: {
             total: 0
          },
          mutations: {
               add (state){
                    // 更改状态
                   state.total++;  
               } 
          },
          actions: {
               add(context){
                     context.commit('add');
               }
          }
    });
    

    Modules

    面对复杂的应用程序,当管理的状态比较多时, 我们需要将Vuex的store对象分割成多个模块(modules)

    const  moduleA = {
        state: { ... },
        mutations: { ... },
        actions: { ... },
        getters: { ... }
    }
    
    const  moduleB = {
        state: { ... },
        mutations: { ... },
        actions: { ... },
        getters: { ... }
    }
    
    const store = new Vuex.Store({
         modules: {
               a:  moduleA,
               b:  moduleB
         }
    });
    

    2. Vuex的运行逻辑

    多个组件共享状态 时:

    • 多个视图依赖于同一状态。
    • 来自不同视图的行为需要变更同一状态。

    传参的方法对于多层嵌套的组件将会非常繁琐,并且对于兄弟组件间的状态传递无能为力,采用父子组件直接引用或者通过事件来变更和同步状态的多份拷贝,模式脆弱,导致代码难以维护。

    所以,Vuex就是把组件的共享状态抽取出来,以一个全局单例模式管理。在这种模式下,我们的组件树构成了一个巨大的“视图”,不管在树的哪个位置,任何组件都能获取状态或者触发行为!

    另外,通过定义和隔离状态管理中的各种概念并强制遵守一定的规则,我们的代码将会变得更结构

    img

    以上是官网的截图,下面这个是自己画的

    操作步骤: 当组件中的状态发生改变,通过dispatch函数提交到Action,Actions再通过Commit函数提交到Mutations, 此时,状态发生改变都会实时的去渲染组件。

    img

    什么情况下使用Vuex?

    中大型单页应用,需要更好的在组件外管理各种状态,使用Vuex。

  • 相关阅读:
    PHP的Tag标签
    PHP 常量
    MySQL知识点链接
    Codeforces Round #593 (Div. 2)D(螺旋形模拟)
    【PAT甲级】1060 Are They Equal (25 分)(需注意细节的模拟)
    【PAT甲级】1059 Prime Factors (25 分)
    【PAT甲级】1058 A+B in Hogwarts (20 分)
    【PAT甲级】1057 Stack (30 分)(分块)
    【PAT甲级】1056 Mice and Rice (25 分)
    Atcoder Grand Contest 039C(容斥原理,计数DP)
  • 原文地址:https://www.cnblogs.com/friday69/p/10536068.html
Copyright © 2020-2023  润新知