Vuex

Vuex常见属性以及组件中调用的几种方法

定义 :vue组件的状态管理模式,存放在vuex里的数据可以在所有的组件当中使用;

vuex的引用

import vuex from 'vuex'


vuex中的核心属性

  • state: 用来存放数据的属性.

    state:{
      num : 50, //定义一个num
      title : 400
    }
    
  • getters:类似组件中的computed属性,其值受state中的影响,

    getters : {
      //例如写一个总和的函数
        //需要传一个参数,也就是state
      dbNum(state){
            return state.num * 2
        }
    }
    
  • mutations : 组件如果想要改变vuex中的数据时,那么vuex提供的改变数据的方法将写在此属性下 ,这里的方法必须是同步的,异步只能改变视图的值

mutations:{
    //state为了获取到数据;
    //payload即是调用该方法时传的参数,可以是个对象
    chanNum(state,payload){
        state.num += payload  //如果传的参数是对象{age:20},payload.age
    }
}
  • actions:用于存储异步处理数据的方法,最常见的就是settimeout(),

    actions : {
          //context是一个对象,里面的commit()方法用来调用mutations中的方法
        //解构  let {commit} = context
        asyncChanNum ({commit},payload) {
            settimeout (() =>{
                //注意这里是调用mutations中的函数
                commit("chanNum",payload)
            },5000)
        }
    }
    

vuex的拆分

由于在开发过程当中,要存储的数据很多,所以将其拆分一个个小块

在store中新建一个vuex对应功能的文件夹以及js文件,例如:/store/add/index.js
  • 在index.js中导出对象
export default {
    //注意需要一个命名空间为true,不然在组件中调用的时候不能识别,设置可读 
    namespaced:true,
    state : {},
    mutations : {},
    getters:{},
    actions : {},
}
  • store/index.js中引用
import Vue from 'vue'
import Vuex from 'vuex'
import add from "./add"  //idnex.js可以省略,尽量模块名保持一致
Vue.use(Vuex)
//导出Vuex
export default new Vuex.Store({
    modules : {
        add  //注册模块
    }
})
将vuex模块进一步细化
  • 同理,将state mutations getters action 单独放在相应的功能文件夹下面,在index.js中统一导入

    import actions from "./actions";
    import getters from "./getters";
    import mutations from "./mutations";
    import state from "./state";
    export default {
    
      namespaced: true, //设置可读  可以在store中把当前模块文件夹名称(add),当作模块名使用
      state,
      getters,
      mutations,
      actions,
    }
    

vuex的引用

一、普通调用

注意当把vuex一一拆分之后,$store就失去作用了

<template>
    <div>
        <p>{{$store.state.num}}</p>
        <p>
            {{dbNum}}
        </p>
        <button @click="asyncChanNum">  //调用的函数名  ,也可以在此处传参数
            add
        </button>
    </div>
</template>
export default {
    //vuex中的state和getters要写在computed属性中
    //$store是一个对象,用来接受vuex中的属性
    computed:{
        num(){
           return this.$store.state.num
        },
        dbNum(){
         return this.$store.getters.dbNum
        }
    },
    //其余的两个属性在methods中调用或者直接在标签中使用
    methods:{
        chanNum(){
            //注意mutations中函数的调用   commit()
            this.$store.commit("chanNum",{age : 20}) //第一个是vuex中的方法名,第二个要传的实参
        },
        asyncChanNum(){
            this.$store.dispatch("asyncChanNum",{num:50})
        }
    }
}

二、辅助函数

  • 在组件中引入模块

    import { mapState, mapMutations,mapGetters,mapActions } from "vuex";

  1. 展开数组的方式引用

    <template>
     <div>
            {{num}}
        </div>
        <p>
            {{dbNum}}
        </p>
    </template>
    
    export default {
        computed  :{
            // 数组当中写数据或者函数
            ...mapState(["num",]) ,
            ...mapGetters(["dbNum"])
        },
        methods : {
           //数组中的数据可直接使用胡子语法在模板中使用,也可以用this来调用
            ...mapMutations(["chanNnm"]),
            ...mapActions(["asyncChanNum"])
        }
    }
    
  2. 展开对象的方式引用

    export default {
        computed:{
            //写成对象的形式,state中的数据有所不同
            ...mapState({
                num : state => state.num,  //当vue拆分后,state.路径.数据   当时设置namespaced:true就是为了在这里起作用
            }),
        },
        methods :{
            ...mapMutations :({
                chanNum : "chanNum" ,//同理若是拆分后就要在前面加上路径
            })
        }
    }
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 vuex 应用场景: 频繁进...
    韩girl阅读 1,657评论 0 0
  • 简介 Vuex中的辅助函数可以简化我们的操作,让我们操作Vuex中的数据更加的方便。 通过下面的演示来展示...
    a91afcace9ee阅读 3,459评论 0 1
  • vuex 基本使用 1. 安装 vuex 2. 在vue项目下的src目录下创建一个 store 目录,并在里面...
    塔木德_lil_47阅读 1,436评论 0 0
  • 安装 npm npm install vuex --save 在一个模块化的打包系统中,您必须显式地通过Vue.u...
    萧玄辞阅读 7,985评论 0 7
  • 概念 state:驱动应用的数据源state由mutations来更改,当computed绑定state时可以用m...
    passenger_z阅读 1,176评论 0 2