对Vuex的理解和简单使用

对Vuex的理解和使用

1、什么是vuex?
vuex是一个专为vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则状态以一种可预测的方式发生变化
2. vuex是用来解决什么问题的?
vuex用来解决多个组件状态共享。如果项目中多处用到同一个数据,可以考虑放在store里。总而言之,如果只是局部父子组件之间的数据问题,就用props等处理,全局状态的话考虑vuex,统一管理。
3.vuex的运作图解
在这里插入图片描述
4.vuex的具体用法
1)首先在vue.js开发环境中安装vuex
npm install vuex --save
2) 在main.js中创建store对象

    import vuex from "vuex";
    Vue.use(vuex);
    var store = new vuex.Store({// store对象
       state: {
         count: 0
       }
    })

完成到这一步,如果要访问count的话,this.$store.state.count

现在还有一个问题,store对象是放在main.js里面,为了方便日后的维护管理,最好把vuex的配置单独放出啦,在src下新建一个store文件夹,创建一个index.js

import Vue from "vue";
import vuex from "vuex";
Vue.use(vuex);
export default new vuex.Store({
    state:{
        count:4
    }
})

main.js中的代码:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import store from "./store/index"
Vue.config.productionTip = false
// 在vue实例化的时候加入store对象
/* eslint-disable no-new */
new Vue({
  el: '#app',
  store,
  components: { App },
  template: '<App/>'
})

组件访问state的方式

第一种:

this.$store.state.xxx

第二种:从vuex中按需导入mapState函数

import {mapState} from "vuex"

通过刚才导入的mapState函数,将当前组件需要的全局数据,映射为当前组件的computed计算属性

如何改变store中的数据?
Mutation 用于变更Store中的数据
1. 只能通过mutation变更Store数据,不可以直接操作Store中的数据
2. 通过这种方式虽然操作稍微繁琐一些,但是可以集中监控所欲数据的便化。

在store/index.js中

import Vue from "vue";
import vuex from "vuex";
Vue.use(vuex);
export default new vuex.Store({
    state:{
        count:4
    },
    mutations:{
        add(state){
            // 变更状态
            state.count++;
        }
    }
})

在组件中触发mutations的第一种方式

methods:{
    handleCount(){
      // 触发mutations的第一种方式
      this.$store.commit("add");
    }
  }

可以在触发mutations时传递参数:

mutations:{
        add(state,step){
            // 变更状态
            state.count+=step;
        }
    }

在组件中的用法:

handleCount(){
      // 触发mutations的第一种方式
      this.$store.commit("add",8);
    }

触发mutations的第二种方式:
在组件中:

import {mapState,mapMutations} from "vuex"

 methods:{
    handleCount(){
      // 触发mutations的第一种方式
      this.$store.commit("add",8);
    },
    ...mapMutations(["add"])
  }
 <button @click="add(3)">MapMutations Click </button>

什么是actions?
背景:在mutation中我们讲到,mutation中是存放处理数据的方法的集合,我们使用的时候需要commit.但是commit是同步函数,而且只能是同步执行。那我们想异步操作怎么办?
作用:在actions中提交mutation,并且可以包含任何的异步操作。actions可以理解为通过将mutations里面处理数据的方法变成可异步的处理数据的方法,简单的说就是异步操作数据(但是还是通过mutation来操作,因为只有它能操作)

1. 定义actions
  在store/index.js中
import Vue from "vue";
import vuex from "vuex";
Vue.use(vuex);
export default new vuex.Store({
    state:{
        count:4
    },
    mutations:{
        add(state,step){
            // 变更状态
            state.count+=step;
        },
        addN(state,step){
            state.count+=step;
        }
    },
    actions:{
        addNAsync(context,step){
            setTimeout(()=>{
                context.commit("addN",step)
            },1000)
        }
    }
})

触发actions

在组件中:
第一种触发actions的方式

 handle(){
      // 调用dispatch函数
      // 触发actions时携带参数
      this.$store.dispatch("addNAsync",5)
    },

第二种触发actions的方式:

import {mapState,mapMutations,mapActions} from "vuex"
  ...mapActions(["addNAsync"])(在methods中)
 <button @click="addNAsync(5)">mapActions click</button>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值